我在警报控制器中访问数据时遇到问题
let alert = this.alertCtrl.create({
title: 'Edit Index',
inputs:this.customIndexes,
buttons:[
{
text: 'Cancel',
role: 'cancel',
handler: data=> {
console.log('Cancel clicked');
}
},
{
text: 'Save',
handler: data=>{
console.log(data);
/*for(let item of this.customIndexes)
{
this.customIndexes[item.name].value = data[item.name];
}*/
this.postEditedIndex(this.customIndexes);
}
}
]
});
alert.present();
当用户单击“保存”按钮时,如何访问数据?
我的输入是动态的,与指定的数组类似
customIndexes: { name: string, value: string, placeholder: string }[] = [];]
该函数显示填充到自定义索引中的所有字段,但是如何从保存按钮处理程序中的数据对象访问它们呢?
答案 0 :(得分:0)
您遇到的问题是由于对象文字的this
作用域。考虑一下这个小提琴:http://jsfiddle.net/1b68eLdr/76008/
class Test1 {
name = "Name1";
getName() {
let test2 = {
name: "Name2";
getName2: ()=> {
return this.name;
}
}
return test2.getName2();
}
};
let test1 = new Test1();
let name1 = test1.getName()
最后,name1 ===“ Name2”。这是因为当您在另一个对象中定义一个函数时,它会获得该对象的功能,而不是外部作用域中的功能。通过将此this分配给另一个变量(通常使用self
)很容易解决。像这样:http://jsfiddle.net/5nup6cgx/
class Test1 {
name = "Name1";
getName() {
let self = this; //<<<< NOTE HERE
let test2 = {
name: "Name2";
getName2: ()=> {
return self.name; //<<<< AND HERE
}
}
return test2.getName2();
}
};
let test1 = new Test1();
let name1 = test1.getName()
因此,您可能想这样做:
let self = this; //<<<<< NOTE HERE
let alert = this.alertCtrl.create({
title: 'Edit Index',
inputs:this.customIndexes,
buttons:[
{
text: 'Cancel',
role: 'cancel',
handler: data=> {
console.log('Cancel clicked');
}
},
{
text: 'Save',
handler: data=>{
console.log(data);
for(let item of self.customIndexes) //<<<<< AND HERE
{
self.customIndexes[item.name].value = data[item.name]; //<<<<< AND HERE
}
self.postEditedIndex(self.customIndexes); //<<<<< AND HERE
}
}
]
});
alert.present();