Проблема, с которой вы столкнулись, связана с 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, а не тот, что находится во внешней области видимости.Обойти это легко, присвоив 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();