ionic2 Хранение массива объектов в хранилище - PullRequest
0 голосов
/ 03 мая 2018

Я следую следующему примеру в хранилище ionic2: https://ionicframework.com/docs/storage/

Я получаю параметр объекта со страницы формы, добавляю его в переменную myBOTs и сохраняю весь массив объектов, чтобы я мог использовать его для заполнения списка при обновлении страницы.

В конструкторе я просто вызывал хранилище, чтобы найти текущие значения для заполнения списка.

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

проблема лежит ниже где this.storage.set ('myBOTs', this.myBOTs) . только последний объект массива сохраняется, когда я пытаюсь console.log (значения) получить данные после .set.

Я думаю, что, возможно, ионное хранилище не может хранить массив объектов в .set? или если нет, то в чем проблема?

ionViewDidLoad(){
    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);
        this.storage.get('myBOTs').then((values)=>{
            console.log(values);
        })          
    }
}

1 Ответ

0 голосов
/ 04 мая 2018

Я решил это.

Проблема заключается в том, что как конструктор, так и 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');        
    }    
}

работает отлично. Может помочь кому-нибудь, так как это довольно распространенный сценарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...