我正在尝试设置一个布尔属性,该属性嵌套在两个forEach循环中。
循环工作正常,但出现错误消息: TypeError:无法设置未定义的属性“ hasAtLeastOne”。
有人有什么想法吗?
谢谢。
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.
}
})
});
}
}
答案 0 :(得分:2)
您的循环函数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;
}
})
});
}
在循环函数中绑定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));
}
使用箭头功能(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;
}
})
});
}