【问题标题】:Injected Dependencies become undefined in angular service注入的依赖项在角度服务中变得未定义
【发布时间】:2016-07-23 00:05:57
【问题描述】:

我有一个角度服务:

.service("MyService", ["$q", "myDep1", "myDep2", function ($q, myDep1, myDep2) {
    function aFunction() {
        //Breakpoint 2
    }

    return { //Breakpoint 1
        aFunction: aFunction
    }
}]);

在Breakpoint 1(定义服务的地方),定义了myDep1 和myDep2。当我的控制器调用 aFunction 并且我点击 Breakpoint 2 时,这些依赖项是未定义的(尽管 $q 仍被定义)。

什么给了?我尝试将其更改为factory,但这并没有改变任何东西。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    试试下面的代码

    .service("MyService", ["$q", "myDep1", "myDep2", function ($q, myDep1, myDep2) {
        this.aFunction = function() {
         // myDep1, myDep2 can be accessed here
        }
    
    }]);
    

    现在,在您的控制器中,您可以直接调用MyService.aFunction()。

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题,但使用了 .provider

      在这里尝试我的解决方案Injected Dependency is undefined in Unit Test

      【讨论】:

        【解决方案3】:

        我的用例略有不同,但我的解决方案对我有用。不过,如果有人有的话,我希望看到一个对我来说似乎不那么黑客的东西。

        我将依赖项注入到函数中,如下所示:

        .service("MyService", ["$q", "myDep1", function ($q, myDep1) {
        
          // add myDep1 as a param in aFunction
          function aFunction(_myDep1_) {
            // myDep1 is in scope via _myDep1_
          }
        
          // calling aFunction here and passing in myDep1 will pass that dependency into the function
          aFunction(myDep1);
        
          return { //Breakpoint 1
            aFunction: aFunction
          }
        }]);
        

        注意:如果您从应用程序的其他位置调用 myService.aFunction(),则必须将 myDep1 作为参数传入,这绝对是丑陋的。如果你发现你开始经常这样做,那么你可能在某个地方有一个反模式在起作用。我不认为这是最好的方法,但在紧要关头它可以工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-03
          • 2018-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-12
          • 1970-01-01
          相关资源
          最近更新 更多