我有一个填充视图数据的服务。视图数据取决于从数据库中提取的数据,并且需要等到数据加载完毕。
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
。
答案 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