我正在尝试在angularjs中动态定义服务,正如文档所说,$provide
和$injector
是服务,因此它们应该可以注入module.run
..
我需要通过app bootstrap提供动态服务,这就是我试图在module.run
中定义它们的原因
angular.module('remote.interface',[])
.run(['$provide', '$injector', function(provide, injector){
// provide dynamically
}]);
但最终会出现错误:[$injector:unpr] Unknown provider: $provideProvider <- $provide
,如果我尝试删除$提供注射,则$injector
也会出现相同的错误。
错误在哪里?
[编辑]
经过一些研究,我尝试过这样的事情:var module = angular.module('remote.interface',[])
.run([function(){
var provide = module.provider(),
injector = angular.injector();
provide.value('my.val',{i:'am a value'});
injector.get('my.val'); // this throws [$injector:unpr] Unknown provider: my.valProvider <- my.val
}]);
即使我删除injector.get
调用,如果我尝试注入my.val
,例如,在另一个模块的控制器中,angular也会抛出相同的错误。
答案 0 :(得分:6)
查看模块的文档,并阅读示例设置中的注释,特别是这些注释。
<强>配置强>
您只能将提供者(非实例)注入配置块
生成强>
您只能将实例(不是提供者)注入运行块
Here is an example setup on JSFiddle正确注入$ provide和$ injector。
https://docs.angularjs.org/guide/module
angular.module('myModule', []).
config(function(injectables) { // provider-injector
// This is an example of config block.
// You can have as many of these as you want.
// You can only inject Providers (not instances)
// into config blocks.
}).
run(function(injectables) { // instance-injector
// This is an example of a run block.
// You can have as many of these as you want.
// You can only inject instances (not Providers)
// into run blocks
});