如何将变量从控制器范围传递到工厂

时间:2019-06-07 16:02:04

标签: javascript angularjs

所以我希望用户能够更改此服务使用的cityName:

app.factory("getWeatherJSON", ['$http', function ($http) {
    return $http.get(`https://api.openweathermap.org/data/2.5/weather?q=${cityName}&appid=8c644b89f214d6bee6c2123faabfb05&units=metric`)
        .then(function (data) {
            return data;
        })
        .then(null, function (err) {
            return err;
        });
}]);

这是我的控制器(cityName来自何处):

app.controller("mainController", ["$scope", "getWeatherJSON", function mainController($scope, getWeatherJSON) {
    $scope.cityName = "Rio de Janeiro";
    getWeatherJSON.then(function (data) {
        const weatherData = data.data;
        console.log(weatherData)
    })
}])

我试图在服务内部使用$ scope.cityName,但没有成功,像这样:

return $http.get(`https://api.openweathermap.org/data/2.5/weather?q=${$scope.cityName}&appid=8c644b89f214d6bee6c2123faabfb05&units=metric`)

1 个答案:

答案 0 :(得分:2)

要获得预期结果,请使用以下选项
1.通过传递cityName将工厂包装返回到另一个函数中
2.使用$ scope.name值作为参数值,即getWeatherJSON($ scope.cityName)

执行GET请求的快捷方式。

工厂:
app.factory("getWeatherJSON", ['$http', function ($http) { return function(cityName){ return $http.get(https://api.openweathermap.org/data/2.5/weather? q=:cityName&appid=8c644b89f214d6bee6c2123faabfb05&units=metric)
} }]);

控制器:
    https://api.openweathermap.org/data/2.5/weather? q=:cityName&appid=8c644b89f214d6bee6c2123faabfb05&units=metric