注入不同的辅助函数Angular

时间:2016-04-17 19:39:04

标签: angularjs

我正试图在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()。

2 个答案:

答案 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)

您无法重新申请工厂。正如您已经注意到的,这将覆盖之前的。

您可以在单独的文件中准备帮助程序,并在应用程序的其他位置的一个工厂调用中注册它们。