更新
我的控制器从两个服务加载数据,并且在其中一个服务返回了数据之前已链接了该伪指令。因此,我认为我需要找到一种方法来防止在实际填充第二个服务中的变量之前加载指令。
处理该问题的最佳方法是什么?
原始问题:
我有一个对象数组的作用域,也有一个整数。因此,在控制器中,如下所示:
$scope.array = [
{title: 'foo', first: 'spam', second: 'eggs'},
{title: 'bar', first: 'maps', second: 'sgge'}
];
$scope.another = 400;
我正在使用ngRepeat将值从数组中的每个对象传递给指令,如下所示:
<div ng-repeat="a in array"
my-directive="a.title"
my-first-val="a.first"
my-second-val="a.second"></div>
我还想绑定另一个值,该值对于指令的所有实例都是相同的,但也可能会更改:
<div ng-repeat="a in array"
my-directive="a.title"
my-first-val="a.first"
my-second-val="a.second"
another-val="another"></div>
这个最终值似乎从未正确绑定[实际上,它没有绑定,因为它尚未填充-这里使用的语法很好]。这可能吗?还有另一种方法可以使用ngRepeat将单个值绑定到指令的所有实例吗?
要回答您的最新问题,建议您使用$ q承诺。您可以使用promise来加载每个服务的数据,然后使用all
方法来组合2。
var promise1 = arrayService.getArray();
var promise2 = anotherService.getAnother();
var promise = $q.all([promise1, promise2]);
promise.then(function(data) {
$scope.array = data[0];
$scope.another = data[1];
});
编辑:我从您的评论中了解到,您想知道如何通过服务返回承诺。“ arrayService”服务中的代码
angular.module('yourApp').service('arrayService', function($q, someAsyncService) {
this.getArray = function() {
var deferred = $q.defer();
someAsyncService.get(function(err, data){
if (err) {
deferred.reject(err);
}
else {
deferred.resolve(data);
}
});
return deferred.promise;
};
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句