当需要根据环境使用不同的服务/工厂实现时,AngularJS中的最佳做法是什么。
我们假设我有一项服务MessageService
,它正在注入其他一些服务,但根据设备/平台,它应该使用WebService
与MobileService
。
以下是我现在所做的事情:
angular
.module('message')
.service('MessageService', messageService);
var service = 'WebService';
if (mobileDevice) {
service = 'MobileService';
}
messageService.$inject = [service];
function messageService(service) {
service.call(); // use the shared interface for both services inside this service
}
有更好 - 更优雅的方式吗?
答案 0 :(得分:1)
您可以使用模块的'config'块来使用像这里的'提供者'那样做 -
angular.module('app').config(['$provide', '$injector', 'mobileDevice',
function($provide, $injector, mobileDevice) {
$provide.value('MessageService', (mobileDevice) ? $injector.get('MobileService') : $injector.get('WebService'));
}
]);
这假设'mobileDevice'是一个角度常数。
现在你可以注入'MessageService'来做你想做的事。