Javascript Angular2 forEach无法读取属性
我如何在数据Javascript Angular2 forEach无法读取属性,javascript,angular,angular2-directives,Javascript,Angular,Angular2 Directives,我如何在数据forEach()中调用this.firms 我知道如何在Angular1中做到这一点,但我目前在Angular2中的项目不知道 目前,它在forEach外部工作正常,但在forEach内部工作不正常 console.log(this.firms[0].name); // works var a = 0; console.log("--------------"); data.forEach(function (eachObj) { c
forEach()中调用this.firms
我知道如何在Angular1中做到这一点,但我目前在Angular2中的项目不知道
目前,它在forEach外部工作正常,但在forEach内部工作不正常
console.log(this.firms[0].name); // works
var a = 0;
console.log("--------------");
data.forEach(function (eachObj) {
console.log("firms check!");
console.log(this.firms); // not working
a = a + eachObj.income;
eachObj.name = this.firms[data.firmid - 1].name; // wont work
});
错误:
Cannot read property 'firms' of undefined
上下文这个不会被注入到由forEach()调用的匿名函数中。这就是为什么这个是未定义的
如果使用ES6功能,您可以使用箭头函数
,因为它在函数中保留上下文:
data.forEach(eachObj => {
console.log("firms check!");
console.log(this.firms);
a = a + eachObj.income;
eachObj.name = this.firms[data.firmid - 1].name;
});
或者直接绑定上下文:
data.forEach(function (eachObj) {
console.log("firms check!");
console.log(this.firms);
a = a + eachObj.income;
eachObj.name = this.firms[data.firmid - 1].name;
}.bind(this));
编辑:
如所述,您只需将上下文传递给forEach()
:
这是javascript中作用域的基本示例。
在函数内部,此
指函数本身的上下文。外部世界是不可访问的
由于您将Typescript与angular一起使用,因此只需使用箭头函数即可:
data.forEach((eachObj) => {
console.log("firms check!");
console.log(this.firms); // not working
a = a + eachObj.income;
eachObj.name = this.firms[data.firmid - 1].name; // wont work
});
这将保留作用域,并且您的此
在其内部可用。
在纯javascript中,您可以执行以下操作:
var that = this;
data.forEach(function (eachObj) {
console.log("firms check!");
console.log(that.firms); // not working
a = a + eachObj.income;
eachObj.name = that.firms[data.firmid - 1].name; // wont work
});
您可以尝试将数据
设置为
像这样:
Array.from(data).forEach((eachObj) => {
console.log("firms check!");
console.log(that.firms);
eachObj.name = that.firms[data.firmid - 1].name;
})
这也会起作用请向我们提供一个可能的副本,我有同样的问题,我使用的是angular 7,但没有一个解决方案有效。
Array.from(data).forEach((eachObj) => {
console.log("firms check!");
console.log(that.firms);
eachObj.name = that.firms[data.firmid - 1].name;
})