我尝试了以下内容:
$resource(ur'stuff/:thingId',
{
someMethod:{
method: 'GET',
interceptor: ['OtherService', function(Otherservice){
console.log('Too bad, not executed...');
return {
response: (response) => {
console.log('Too bad, not executed...');
}
}
}]
}
}
)
但它不起作用。我发现有人提到$资源与$ http相比具有特殊性,但我找不到合适的模式。
答案 0 :(得分:1)
你不能直接用拦截器注入服务,而应该在工厂或服务中包装$ resource,然后可以使用工厂依赖来使用$ resource.interceptor。
示例如下:
angular.module('mainModule', ['ngResource']).
factory("MyResource", ['$resource', 'SomeService', function ($resource, SomeService) {
return $resource(
'/', {
someMethod: {
method: 'GET',
interceptor: {
response: function (data) {
// here you can use SomeService
console.log('response in interceptor', data);
},
responseError: function (data) {
// here you can use SomeService
console.log('error in interceptor', data);
}
}
}
}
);
}]);
以ES6方式导入服务的方式:
import mainModule from './mainModule';
class SomeController {
constructor($scope, SomeService) {
this.$scope = $scope;
this.SomeService= SomeService;
}
}
SomeController.$inject = ['$scope', 'SomeService'];
mainModule.controller('SomeController', SomeController);
以类似的方式,你也可以建立工厂和服务。