我正在尝试设置一个嵌套在两个 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)
| 归档时间: |
|
| 查看次数: |
2989 次 |
| 最近记录: |