Я решил это.
Проблема заключается в том, что как конструктор, так и ionViewDidLoad асинхронно вызывается при загрузке страницы. Это приводит к тому, что данные передаются со страницы формы и добавляются в this.myBOT перед тем, как результаты извлекаются и загружаются из хранилища в списке в конструкторе.
Так вот мое решение. Что я сделал, так это добавил код в функции и добавил функцию обратного вызова в мою функцию создания списка, прежде чем данные формы будут добавлены в список.
id: any;
icons: string[];
myBOTs: Array <{type: string,BOTdate: string, setReminder: boolean, icon: string}>;
constructor(public navCtrl: NavController, public navParams: NavParams, private storage: Storage) {
this.myBOTs=[];
let e = this;
this.generate_list(function(){
e.add_item();
})
}
функция создания списка для настройки предыдущих элементов списка из хранилища.
generate_list(callback){
this.storage.get('myBOTs').then((values)=>{
if(values!==null){
for(let i = 0;i < values.length;i++){
this.myBOTs.push({
type: values[i].type,
BOTdate: values[i].BOTdate,
icon: this.icons[Math.floor(Math.random() * this.icons.length)],
setReminder: values[i].setReminder
})
}
}
callback();
})
}
затем добавьте новый элемент из данных из navParams
add_item(){
if(this.navParams.get('type')!==undefined){
let addedBOT = [];
addedBOT['type'] = this.navParams.get('type');
addedBOT['BOTdate'] = this.navParams.get('BOTdate');
addedBOT['setReminder'] = this.navParams.get('setReminder');
this.myBOTs.push({
type: addedBOT['type'],
BOTdate: addedBOT['BOTdate'],
icon: this.icons[1],
setReminder: addedBOT['setReminder']
})
this.storage.set('myBOTs',this.myBOTs);
console.log('storage added');
}
}
работает отлично. Может помочь кому-нибудь, так как это довольно распространенный сценарий.