我有服务
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”?
答案 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方法调用的一部分传递,并且可以在其他与闭包相关的情况下工作。