Перебирать данные, полученные из alertController - PullRequest
0 голосов
/ 27 сентября 2018

У меня проблема с доступом к данным в моем контроллере оповещений

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 голосов
/ 27 сентября 2018

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