AngularJs 无法在 module.run 中注入$provide和$injector服务



我尝试在angularjs中动态定义服务,正如文档所说,$provide$injector是服务,因此它们应该在module.run中是可注入的。我需要从应用程序引导中提供动态服务,这就是为什么我试图在module.run

中定义它们
angular.module('remote.interface',[])
.run(['$provide', '$injector', function(provide, injector){
  // provide dynamically
}]);

,但这最终在一个错误:[$injector:unpr] Unknown provider: $provideProvider <- $provide, $injector相同的错误,如果我试图删除$提供注入。
bug在哪里?

[编辑]

经过一番研究,我试着这样做:

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也会抛出同样的错误。

请查看模块的文档,并阅读示例设置中的注释,特别是这些注释。

配置

你只能在配置块中注入提供商(不是实例)

你只能在运行块中注入实例(而不是提供程序)

下面是一个在JSFiddle上正确注入$ provider和$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
  });

相关内容

最新更新