AngularJS:没有$ http的服务异步AJAX请求的正确方法是什么

时间:2013-06-24 02:08:39

标签: angularjs angularjs-service

假设我们有一些从服务器获取数据的服务。它是异步的,并没有使用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

0 个答案:

没有答案