我的角度应用程序有两种不同的蓝牙低功耗服务实现。
所以我创建了一个通用bluetoothServiceProvider
,它应该返回正确的蓝牙服务实现。一个是cordovaBluetoothService
,另一个是chromeBluetoothService
。所以我检查window
属性并决定我需要哪一个。
我知道我可以将这两项服务注入$get
函数,如
this.$get = [
'chromeBluetoothService',
'cordovaBluetoothService',
function(chromeBtS, cordovaBtS) {
if(window.cordova) {
return cordovaBtS;
else {
return chromeBtS;
}
}
];
但这不是最优的,因为两个依赖项都在注入时实例化(我不想在实现中进行特征检测),所以我希望它们在if子句中实例化。我该怎么做?
我试过了:
var $injector = angular.injector();
return $injector.get('chromeBluetoothService');
但它会返回Unknown provider: chromeBluetoothServiceProvider <- chromeBluetoothService
如果我这样做:var $injector = angular.injector('myApp.services');
它无法实例化模块,因为这仍然是配置阶段。
答案 0 :(得分:1)
您应该注入应用的$injector
(因此它了解您的应用可用的服务)
幸运的是,$injector
服务知道如何注入自己:
this.$get = ['$injector', function ($injector) {
if (window.cordova) {
return $injector.get('cordovaBluetoothService');
else {
return $injector.get('chromeBluetoothService');
}
}