【发布时间】:2016-01-29 02:17:03
【问题描述】:
我的 Angular 服务中有多个工厂位于不同的 js 文件中。所有查询都有一个共同的基础:
1) 授权:Bearer token (header)(登录后需要)
2) AccessDateTime、UserIPAddress(登录前必填)
3) AccessDateTime、UserIPAddress、UserID(登录后必填)
现在,我发现在每个资源上重复此操作非常乏味。我怎么能为此做一个基础?我认为这是很常见的事情,但我找不到任何关于此的文档。类似 jquery.AjaxSetup() 的东西。
默认代码
angular.module('app.test').factory('Test', ['$resource',
function($resource) {
return {
resource1: $resource(
url: 'test1/:testId/:AccessDateTime/:UserIPAddress',
headers: { Authorization: Bearer token},
params: { testId: '@_id', AccessDateTime:'@AccessDateTime', UserIPAddress: '@UserIPAddress' }
}),
resource2: return $resource(
url: 'test2/:testId/:AccessDateTime',
params: { testId: '@_id', AccessDateTime:'@AccessDateTime' }
});
}
}
]);
基础资源实现后的代码(仅插图)
angular.module('app.base').factory('FactoryBase'), ['resource',
function($resource) {}
if (resource need authorization) {
auto append header, AccessDateTime, UserIPAddress
} else if (resource do not need authorization) {
auto append AccessDateTime
}
// depending on attribute set with authorize: true/false
}
]);
angular.module('app.test').factory('Test', ['$resource',
function($resource) {
require('FactoryBase'),
return {
resource1: $resource(
url: 'test1/:testId',
authorize: true
}),
resource2: $resource(
url: 'test2/:testId',
authorize: false
}),
}
]);
【问题讨论】:
-
你可以看看 Backbone 如何扩展类 github.com/jashkenas/backbone/blob/master/backbone.js#L1858
标签: angularjs ngresource