点击重载按钮后,AngularJS-then()方法未被调用
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
确实被调用(正如我的alert语句所测试的那样)。
有人能告诉我我在这里做错了什么吗?
您必须将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);
});
相关文章:
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- javascript从子方法调用父方法
- 我应该返回一个类似console.log()的方法调用吗
- NodeJS-从同一文件中的另一个方法调用一个方法
- 使用restangular save方法调用put与post时的控件
- 从实例方法调用实例方法
- Node.js-异步方法调用问题
- Jquery事件绑定获胜'当作为方法调用时不起作用,但当直接在控制台中调用时会起作用
- 向模板实例变量传递调用方法调用的结果时出现异常
- jQuery 方法调用了两次
- 不能从 Backbone.View 的方法调用 Backbone.collection 的方法,其中包含 require
- 组合 onLayout 的方法调用
- lodash/下划线 - 使用绑定与方法调用和方法保持未绑定
- 从公共方法调用模块的私有函数
- 如何对 jqGrid 的 loadComplete 和 onSelectRow 进行基因预和后方法调用
- 完全限定的 JavaScript 方法调用
- 为什么我在 Angular JS 中收到两个方法调用
- 如何在从排序方法调用参数时将其传递给回调
- 使用两种不同的方法调用方法
- 如何在 javascript 中更改方法调用的全局范围