ANGULAR运行时向模块添加服务

时间:2014-11-23 15:31:50

标签: angularjs angularjs-service

如何在运行时向模块/角度应用添加服务。

$injector$provide会帮助我吗?

这样的东西
app.addService('s',['k',function(k){console.log('new Service k');}]);

1 个答案:

答案 0 :(得分:1)

是的,$provide会这样做。请参阅https://docs.angularjs.org/api/auto/service/ $ provide

上的文档

所以你可以做这样的事情(来自foo内):

app.factory('foo',functon() {
   $provide.factory('s',function() {
      console.log("new service 's'");
   });
});

问题在于您无法将$provide直接注入服务,因此您需要在模块创建时捕获它。

问题是,你为什么要这样做?由于在运行“foo”之前未声明服务's',因此您可能会在其他某个点上将服务作为依赖项进行调用。如果它在正常注入的任何地方,你可能会得到一些奇怪的错误。

事实上,我认为唯一的方式是使用$injector从其他服务中获取它。

所以,是的,你可以做到,但你真的想要吗?

看看这个小提琴:http://jsfiddle.net/ch8vu4ng/1/