如何在数据this.firms
中调用forEach()
?
我知道如何在Angular1中执行此操作,但不知道我在Angular 2中的当前项目。
目前它在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
答案 0 :(得分:32)
上下文this
未在forEach()
调用的匿名函数中注入。这就是this
未定义的原因。
如果您正在使用ES6功能,则可以使用arrow function
,因为它会在功能中保留上下文:
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));
修改强>:
如zeroflagL所述,您只需将上下文传递给forEach()
:
data.forEach(function (eachObj) {
console.log("firms check!");
console.log(this.firms);
a = a + eachObj.income;
eachObj.name = this.firms[data.firmid - 1].name;
}, this);
答案 1 :(得分:3)
您可以尝试将data
设为和数组
Array.from(data).forEach((eachObj) => {
console.log("firms check!");
console.log(that.firms);
eachObj.name = that.firms[data.firmid - 1].name;
})
这也适用
答案 2 :(得分:1)
这是javascript范围的基本示例。
函数内部+---------+-------------------+
| GroupId | GroupDescription |
+---------+-------------------+
| T1c | Tier 1 Approver C |
| T2c | Tier 2 Approver C |
| T3c | Tier 3 Approver C |
| T4c | Tier 4 Approver C |
| T5c | Tier 5 Approver C |
+---------+-------------------+
指的是函数本身的上下文。外部世界无法访问。
由于您正在使用带角度的Typescript,因此您可以使用this
:
arrow function
这将保留范围,您的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中你可以这样做:
this