所以我希望用户能够更改此服务使用的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`)
答案 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