我刚刚放弃了这个。但我有$resource
使用query()
来检索项目列表。然后,我有一个Interceptor,它遍历这些项目以插入$interval
。
然后,特定点的$interval
将使用$resource
get()
功能重新获得一个项目。但它的get()
无效。
调用发生但我无法将响应返回到模板中。
myServices.factory('Items', ['$resource',
function($resource) {
return $resource("/items", {}, {
'query': {
interceptor: MyInterceptor,
url: "/items",
isArray: true
},
})
}]);
myServices.factory('MyInterceptor', function($q, $interval, $injector, $rootScope) {
return {
'response': function(response) {
angular.forEach(response.resource, function (item) {
$interval(function () {
item.something = 1 + item.something;
if(item.something == 10)
{
item = $injector.get("Mine").get({slug: item.id});
}
});
});
return response;
}
};
});
我认为这一行item = $injector.get("Mine").get({slug: item.id});
可行,但事实并非如此。模板中的新项目未更改。
所以我把它改成了这样的东西,但也没用;
$injector.get("Mine").get({slug: item.id}, function(data){
item = data;
});
我也试过了$q
和$promise
,但我也没有运气。在这些主题上找到合适的例子也很难。
简而言之......我在$resource
中使用了一个拦截器,其中$interval
然后需要最终更改{{1}内的值数组中的单个值 - 我怎么能让它工作?
答案 0 :(得分:0)
简而言之......我在$资源中使用了一个拦截器,带有$ interval,然后需要最终更改$ scope内值数组中的单个值 - 我怎么能让这个工作?
基于上述陈述,我将给出答案。
首先,删除拦截器。你不需要它。而是使用服务。
编写名为ProcessedItems的服务。
angular.module('app')
.service('ProcessedItems', ['Items', '$q', function(Items, $q){
return {
query: function() {
var defer = $q.defer();
Items.query()
.$promise
.then(function(response){
angular.forEach(response.resource, function(i)){
i.s = 1 + i.s;
if(i.s == 10) {
i = $injector.get("Mine").get({slug: i.id});
i.$promise.then(function(){
defer.resolve(response);
}, function(){
defer.reject();
});
};
};
});
return defer.promise;
}
};
}]);
设置此服务后,您可以在控制器中执行
angular.module('app')
.controller('AppController', ['$scope', 'ProcessedItems',
function($scope, ProcessedItems){
$scope.items = [];
ProcessedItems.query().then(function(pitems){
$scope.items = pitems;
});
});
这基本上要做的是首先完全处理数据,然后在视图中显示它。