假设我们有一些从服务器获取数据的服务。它是异步的,不使用 AngularJS $http 服务。
当我们在 Angular 中处理异步的东西时——我们使用$q
Promise。但是有一个问题:promise 只有在$digest
.
有两种可能的方法来修复它:
1)$timeout
var defer = $q.defer();
$.getJSON('http://example.com/my.json')
.success(function (data) {
$timeout(function () {
defer.resolve(data);
});
});
return defer.promise;
2)$rootScope.$apply()
var defer = $q.defer();
$.getJSON('http://example.com/my.json')
.success(function (data) {
defer.resolve(data);
});
if (!$rootScope.$$phase) $rootScope.$apply();
在 AngularJS$http
服务中使用了第二个变体。
两者之间的区别是什么以及做这些事情的正确方法是什么?
您可以尝试这两种方法:http: //jsbin.com/otakaw/3/edit