我正在尝试在 angularjs 中动态定义服务,正如文档所说,$provide https://docs.angularjs.org/api/auto/service/%24provide and $injector https://docs.angularjs.org/api/auto/service/%24injector是服务,因此它们应该可以注入module.run
..
我需要从应用程序引导程序中提供动态服务,这就是为什么我尝试在中定义它们module.run
angular.module('remote.interface',[])
.run(['$provide', '$injector', function(provide, injector){
// provide dynamically
}]);
但这最终会出现错误:[$injector:unpr] Unknown provider: $provideProvider <- $provide
,同样的错误$injector
如果我尝试删除 $provide 注入。
错误在哪里?
[EDIT]
经过一番研究后我尝试了这样的事情:
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
,例如,在另一个模块的控制器中,角度会引发相同的错误。
查看模块的文档并阅读示例设置中的注释,特别是这些注释。
config
您只能将提供者(而不是实例)注入到配置块中
run
您只能将实例(而不是提供程序)注入到运行块中
这是 JSFiddle 上的示例设置 http://jsfiddle.net/ZrejS/正确注入 $provide 和 $injector 。
https://docs.angularjs.org/guide/module 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
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)