如何使用 $resource 将服务依赖注入到拦截器中
How to do Dependency Injection of a service into an interceptor, using $resource
我尝试了以下方法:
$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...');
}
}
}]
}
}
)
但是不行。我发现有人提到 $resource 与 $http 相比有特殊性,但我找不到合适的模式。
你不能直接用拦截器注入服务,而是应该将$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);
以类似的方式,您也可以创建工厂和服务。
我尝试了以下方法:
$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...');
}
}
}]
}
}
)
但是不行。我发现有人提到 $resource 与 $http 相比有特殊性,但我找不到合适的模式。
你不能直接用拦截器注入服务,而是应该将$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);
以类似的方式,您也可以创建工厂和服务。