2014-07-12 53 views
2

我想在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,并同eror为$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,例如,在其他模块的控制器,角度抛出相同的错误。

回答

6

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

配置

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

运行

只能注入情况下(没有供应商)进入运行块

Here is an example setup on JSFiddle正确注入$ provide和$注射器。

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 
    }); 
+0

谢谢你,当然,我没有乱了我的心! – aleclofabbro