AngularJs不能在module.run中注入$ provide和$ injector服务

时间:2014-07-12 12:17:43

标签: angularjs

我正在尝试在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也会抛出相同的错误。

1 个答案:

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