假设我们有一些从服务器获取数据的服务。它是异步的,并没有使用AngularJS $ http服务。
当我们处理Angular中的异步内容时 - 我们使用$q
个承诺。但有一个问题:承诺只能在$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