迭代从alertController返回的数据

时间:2018-09-27 06:44:40

标签: android typescript cordova ionic-framework

我在警报控制器中访问数据时遇到问题

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 }[] = [];]

该函数显示填充到自定义索引中的所有字段,但是如何从保存按钮处理程序中的数据对象访问它们呢?

1 个答案:

答案 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();