无法使用 TypeScript 在 forEach 循环中设置属性

dev*_*998 0 typescript

我正在尝试设置一个嵌套在两个 forEach 循环中的布尔属性。

循环工作正常,但出现错误: TypeError: Cannot set property 'hasAtLeastOne' of undefined。

有人有什么想法吗?

谢谢。

export classItemComponent implements OnInit {

hasAtLeastOne: boolean = false;


onSubmit(event) {
    this.hasAtLeastOne = false;
    this.user.Item.forEach(function (value) {

    value.ItemMemberships.forEach(function (value) {

      if (value.ItemMembershipActive == 1)
      {
         this.hasAtLeastOne = true;        // This line fails.
      }
    })

  });
}

}
Run Code Online (Sandbox Code Playgroud)

小智 5

在循环函数内部this不再绑定到您的组件。

你有3个解决方案:

使用别名this

hasAtLeastOne: boolean = false;

onSubmit(event) {
  var self = this;
  this.hasAtLeastOne = false;
  this.user.Item.forEach(function (value) {
    value.ItemMemberships.forEach(function (value) {
      if (value.ItemMembershipActive == 1) {
        self.hasAtLeastOne = true;
      }
    })
  });
}
Run Code Online (Sandbox Code Playgroud)

绑定this循环函数

hasAtLeastOne: boolean = false;

onSubmit(event) {
  this.hasAtLeastOne = false;
  this.user.Item.forEach(function (value) {
    value.ItemMemberships.forEach(function (value) {
      if (value.ItemMembershipActive == 1) {
        this.hasAtLeastOne = true;
      }
    }.bind(this))
  }.bind(this));
}
Run Code Online (Sandbox Code Playgroud)

使用箭头函数(ES6):

hasAtLeastOne: boolean = false;

onSubmit(event) {
  this.hasAtLeastOne = false;
  this.user.Item.forEach(item => {
    item.ItemMemberships.forEach(itemMember => {
      if (itemMember.ItemMembershipActive == 1) {
        this.hasAtLeastOne = true;
      }
    })
  });
} 
Run Code Online (Sandbox Code Playgroud)