首先,这是一个诚实的问题。我正在寻找关于为什么我不应该这样做的诚实和合理的答案......
angular
.module('X', ['Y'])
.config(function (myFactoryProvider, myServiceProvider) {
myFactoryProvider.$get().myFn();
myServiceProvider.$get().myFn();
});
angular
.module('Y', [])
.factory('myFactory', ['$location', function ($location) {
return {
myFn: function () {
console.log('factory');
console.log($location.absUrl());
}
}
}])
.service('myService', ['$location', function ($location) {
this.myFn = function () {
console.log('service');
console.log($location.absUrl());
}
}]);
这是一个 JSFiddle:http: //jsfiddle.net/1vetnu6o/
正如您在上面看到的那样,这是有效的,它为我解决了一些问题。但我可能不应该这样做,我想了解原因。我真的需要充分的理由不这样做。尽管我真的很想。
tl;博士;
这是问题的背景......
我有多个产品使用的这个内部框架,其中有一个服务(恰好是一个工厂),它基本上包含一组相关的辅助方法。在这种情况下,设备相关,如isMobileDevice
, isAndroid
, getDeviceType
(带有返回mobile
,tablet
或desktop
),以及其他一些......
该服务必须config()
使用框架注入到应用程序的阶段,因为我们需要访问该getDeviceType
功能。问题是,我们需要deviceType
使用$routeProvider
. config()
我们正在构建用于所有路由的正确模板路径的阶段。其中一些依赖于deviceType
,而另一些则具有独立于设备的通用模板。
由于这是一项服务,我们无法将其直接注入config()
阶段,但我们可以使用我在文章前面提到的技术调用该方法。
我目前如何解决这个问题?辅助服务实际上是一个提供者,所有方法都在提供者部分和工厂函数中公开。不理想,但它有效。我认为这是一种变通方法,但我宁愿在应用程序而不是框架中使用变通方法,因此首先提到了该技术。
想法?