我正试图在Angular控制器中注入一些助手(lodash和我自己的几个),所以我有:
angular.module('app').factory("_", Lodash);
Lodash.$inject = ['$window'];
function Lodash($window) {
if ($window._)
return $window._;
}
angular.module('app').factory("_", Helper);
Helper.$inject = ['$window'];
function Helper($window) {
return {
test: function () {
return "test";
}
}
}
所以我想在_下可以访问所有助手,我会在几个JS文件中定义它们......可以这样做吗?
使用我的代码中只有一个可以工作:lodash方法或test()。
答案 0 :(得分:1)
对于不需要依赖项的服务($window
在这里并不重要,因为它没有用处,可以用window
或_
全局替换{{1} } block是定义它们的好地方,因为那里已经有config
个服务。
constant
当以这种方式定义服务时,其值可以扩展几次,app.config(function ($injector, $provide) {
var lodash = $injector.has('_') ? $injector.get('_') : {};
angular.extend(lodash, window._);
$provide.constant('_', lodash);
});
app.config(function ($injector, $provide) {
var lodash = $injector.has('_') ? $injector.get('_') : {};
angular.extend(lodash, {
test: ...
});
$provide.constant('_', lodash);
});
块的顺序无关紧要。
或者,服务价值can be changed with decorator,为了做到这一点,服务应该已经定义。
答案 1 :(得分:0)
您无法重新申请工厂。正如您已经注意到的,这将覆盖之前的。
您可以在单独的文件中准备帮助程序,并在应用程序的其他位置的一个工厂调用中注册它们。