23

サービスがあります

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;
}

angular.foreach内で「this.list」に到達できない理由と、「this.list」にアクセスするにはどうすればよいですか?

4

2 に答える 2

55

( http://docs.angularjs.org/api/angular.forEachangular.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);

    }
}
于 2013-02-21T21:59:22.230 に答える
6

this.listforeachでアクセスできない理由は、その関数呼び出しのコンテキストが変更されたためです。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メソッド呼び出しの一部としてコンテキストを渡すよりも少し一般的な解決策であり、他のクロージャー関連の状況で機能します。

于 2013-02-21T22:02:55.383 に答える