2013-02-21 15 views
19

訪問我甚至在控制器有一個服務變量在angular.forEach

app.service('myService', function() { 
    this.list = []; 
    this.execute = function() { 
     //this.list is reachable here 
     angular.forEach(AnArrayHere, function(val, key) { 
      //this.list is not reachable here 
     }); 
    } 
} 

其可訪問

function Ctrl($scope, myService) { 
    $scope.list = myService.list; 
} 

有人能解釋我爲什麼「this.list」不是內的角度可達.foreach以及如何訪問「this.list」?

回答

44

angular.forEach(請參閱http://docs.angularjs.org/api/angular.forEach)函數中的最後一個參數是this的上下文。所以你想是這樣的:

app.service('myService', function() { 

    this.list = []; 

    this.execute = function() { 

     //this.list is reachable here 

     angular.forEach(AnArrayHere, function(val, key) { 
      //access this.list 
     }, this); 

    } 
} 
+0

謝謝,它的作品,總是有東西要學習。我以爲我已經知道Angular Docs的一切。 – 2013-02-21 22:01:07

+1

謝謝,角度docs沒有關於如何將範圍變量注入循環。 – Churk 2013-04-08 12:28:34

+0

謝謝,它的工作;) – 2016-11-16 10:09:38

3

原因this.list不是在foreach訪問是因爲該函數調用已經時過境遷。它適用於execute方法,因爲該方法與列表相同的上下文的一部分。

由於所有關閉,我會將this上下文分配給另一個變量,然後您可以稍後調用它。事情是這樣的:

app.service('myService', function() { 

    var self = this; 
    self.list = []; 

    self.execute = function() { 
     //this.list and self.list are reachable here 
     angular.forEach(AnArrayHere, function(val, key) { 
      //self.this == this.list 
     }); 
    } 
} 

這比傳遞上下文作爲在foreach方法調用的一部分稍微更通用的解決方案,並在其他結束相關的情況下是可行的。

+0

謝謝你,這個作品。 – 2013-02-21 22:07:27