我的角度服务中有多个工厂位于不同的js文件中。并且所有查询都有共同基础:
1)授权:不记名令牌(标题)(登录后需要)
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
}),
}
]);
答案 0 :(得分:0)
在工厂中放置修改器功能:
angular.module('app.test').factory('Test', ['$resource',
function($resource) {
var defaultConfig1 = {
url: 'test1/:testId/:AccessDateTime/:UserIPAddress',
headers: { Authorization: Bearer token},
params: { testId: '@_id',
AccessDateTime:'@AccessDateTime',
UserIPAddress: '@UserIPAddress'
}
};
var defaultConfig2 = {
url: 'test2/:testId/:AccessDateTime',
params: { testId: '@_id',
AccessDateTime:'@AccessDateTime'
}
};
function mod1(arg) {
var obj = defaultConfig1;
//modify config
return obj;
};
function mod2(arg) {
//modify and return defaultConfig
};
return {
resource1: $resource(defaultConfig1),
resource2: $resource(defaultConfig2).
modified1: function (arg) {
return $resource(mod1(arg));
},
modified2: function (arg) {
return $resource(mod2(arg));
}
}
}
]);
在返回配置对象之前,您可以充分利用JavaScript来修改配置对象。