Angular:为什么我不能直接向$ get注入$?

时间:2015-07-06 18:48:41

标签: javascript angularjs dependency-injection

我认为这是一个简单的(也许是微不足道的)答案,我只是无法绕过我的脑袋。

为什么这样做我想要的 - 也就是说,将$provide引用到我的服务中:

angular.module('error_reporting', [])
       .provider('RaygunLogger', function() {
           var provide = undefined;

           this.setProvide = function(p){
                provide = p;
           }

           this.$get = function() {
               // use $provide in p
           };
       })
       .config(function(RaygunLoggerProvider, $provide) {
           RaygunLoggerProvider.setProvide($provide);
       });

虽然这会产生Unknown provider: $provideProvider <- $provide <- RaygunLogger <- RaygunLogger形式的错误?

angular.module('error_reporting', [])
       .provider('RaygunLogger', function() {
           this.$get = function($provide) {
                // use $provide
           };
       });

在设置进样器之前RaygunLogger.$get()是否正在运行?我认为这是一个操作顺序问题,我需要等到模块配置阶段才能注入$provide,但我不知道在doc中验证该位置。

2 个答案:

答案 0 :(得分:1)

$provide仅在配置阶段可用。提供程序的$get函数在配置阶段之后运行,以创建提供程序提供的内容。

此时,你无法做你想做的事。

答案 1 :(得分:0)

要在var self = this; 内使用,您通常会使用

启动提供程序功能
$get

并在self(工厂)定义中使用angular.module('foo',[]) .provider('myFoo', function myFooProviderFn() { var self = this; self._debug = false; self.setDebug = function() { self._debug = true; } self.$get = ['$location', function($location) { self.setDebug(); }); });

E.g

$get

认为你不能在server_socket_read_length = 0内使用它是错误的。因此,只能在配置阶段访问和操作实际的纯提供程序实例。这种设计背后的基本原理可能是供应商被认为是配置工厂的一些机制。

来自docs(提供商食谱)的更多信息