1

假设我们有一些从服务器获取数据的服务。它是异步的,不使用 AngularJS $http 服务。

当我们在 Angular 中处理异步的东西时——我们使用$qPromise。但是有一个问题: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

4

0 回答 0