Vur*_*ral 22 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
});
}
}
Run Code Online (Sandbox Code Playgroud)
甚至在控制器中也可访问
function Ctrl($scope, myService) {
$scope.list = myService.list;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么在angular.foreach中无法访问"this.list",我该如何访问"this.list"?
dnc*_*253 52
angular.forEach(参见http://docs.angularjs.org/api/angular.forEach)函数中的最后一个参数是for的上下文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);
}
}
Run Code Online (Sandbox Code Playgroud)
this.list在foreach中不可访问的原因是因为该函数调用的上下文已更改。它在execute方法内部起作用,因为该方法与list属于同一上下文。
由于所有的关闭,我会将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
});
}
}
Run Code Online (Sandbox Code Playgroud)
与在foreach方法调用中传递上下文相比,这是一种更为通用的解决方案,并且可以在其他与闭包相关的情况下使用。