[英]Why is the javascript method not being called from the form button click?
[英]AngularJS - then() method not being called after reload button click
由于AJAX的异步特性,我以前有一个变量未定义的问题。 我已经解决了该问题,但是现在有了一个新问题。 我有以下代码:
$scope.cities = [
{name: 'Phoenix,US'},
{name: 'Atlanta,US'},
{name: 'Honolulu,US'}
];
$scope.items = [];
$scope.reload = function() {
alert("Reload clicked");
var promises = [];
angular.forEach($scope.cities, function(city) {
var deferred = $q.defer();
delete $http.defaults.headers.common['X-Requested-With'];
$http.get('http://api.openweathermap.org/data/2.5/weather?q=' + city.name).success(function(data, status, headers, config) {
alert("success");
deferred.resolve(data);
});
promises.push(deferred.promise);
});
return $q.all(promises);
};
//not being called after reload button is clicked
$scope.reload().then(function(data) {
$scope.name0 = data[0].name;
alert($scope.name0);
);
我的$scope.reload
在初始页面加载以及单击我的重新加载按钮时都会被调用。 但是,单击我的重载按钮后,没有调用scope.reload().then(function(data))
; 即使$scope.reload
确实被调用(与我的警报语句测试一样),它也只会在初始页面加载时被调用。
有人可以告诉我我在做什么错吗?
您必须将then()
函数放入reload()
函数中。
工作提琴
我为您制作了一个工作提琴以向您展示。
我移动了这段代码:
$q.all(promises).then(function(data) {
$scope.answer = data;
});
并将其放入您的reload
函数中。
$scope.reload = function () {
var promises = [];
angular.forEach($scope.cities, function (city) {
var deferred = $q.defer();
delete $http.defaults.headers.common['X-Requested-With'];
$http.get('http://api.openweathermap.org/data/2.5/weather?q=' + city.name).success(function (data, status, headers, config) {
deferred.resolve(data);
});
promises.push(deferred.promise);
});
// This block here:
$q.all(promises).then(function(data) {
$scope.answer = data;
});
};
不确定是否会有所作为,但您实际上并不需要在循环内手动创建新的Promise。 $ http已经返回一个可以使用的承诺:
var promises = [];
angular.forEach($scope.cities, function(city) {
delete $http.defaults.headers.common['X-Requested-With'];
var promise = $http.get('http://api.openweathermap.org/data/2.5/weather?q=' + city.name);
promise.success(function(data, status, headers, config) {
alert("success");
});
promises.push(promise);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.