我的angular服务中有多个工厂位于不同的js文件中。并且所有查询都有一个共同的基础:
1)授权:持有者token (表头)(登录后必填)
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
}),
}
]);发布于 2016-01-29 02:17:04
将修饰符函数放入工厂:
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的全部功能。
https://stackoverflow.com/questions/35066667
复制相似问题