如何等待在angularJS中获取异步数据?

时间:2013-10-08 11:15:04

标签: angularjs

我有一个填充视图数据的服务。视图数据取决于从数据库中提取的数据,并且需要等到数据加载完毕。

E.g:

services.factory('viewService', function (serviceX) {
    var generateView = function (s) {
        var data=[];
        var viewData=[];
        serviceX.getData().then(function (d) {
            data=d;
        });
        console.log("data:"+d);
        for(x in data){
            viewData[x]=data[x].view;
            ....
        }
        return viewData;
    };
    return{
        generateView: generateView
    }
});

serviceX.getData()已使用promise模式。第for(x in data){行需要该数据来生成viewData

3 个答案:

答案 0 :(得分:1)

您应该使用承诺来分离关注点:

angular.module('myModule', [])

.factory('Table', function($resource, $q) {
  return {
    data: function() {
      edsql = edsql || '';
      var deferred = $q.defer();
      $resource('my-resource-url').get({}, function(r) {
        deferred.resolve(r);
      }, deferred.reject);

      return deferred.promise;
    }
  };
});

在控制器中使用如下:

$scope.data = Table.data();

答案 1 :(得分:0)

您可以将其绑定到范围变量。 AngularJS将自动等待数据,然后开始渲染。当然,在将范围设置在范围之前,您需要修改从回调函数中获取的数据。

在你的情况下,这意味着你的服务的generateView方法需要返回一个你可以在你的范围变量上设置的promise。

答案 2 :(得分:0)

另一种方法是使用延迟&的承诺。

此处有更多信息:http://docs.angularjs.org/api/ng。$ q