如何在运行时向模块/角度应用添加服务。
$injector
或$provide
会帮助我吗?
像
这样的东西app.addService('s',['k',function(k){console.log('new Service k');}]);
答案 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/