angular.forEach中无法访问变量

时间:2013-02-21 21:57:19

标签: javascript foreach angularjs

我有服务

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”?

2 个答案:

答案 0 :(得分:51)

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

    }
}

答案 1 :(得分:5)

在foreach中无法访问this.list的原因是因为该函数调用的上下文已更改。它在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方法调用的一部分传递,并且可以在其他与闭包相关的情况下工作。