Angular2 forEach无法读取属性

时间:2017-05-11 11:55:05

标签: javascript angular angular2-directives

如何在数据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

3 个答案:

答案 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