Ionic ng для дублирования пунктов списка - PullRequest
0 голосов
/ 04 июня 2018

Помогите, ребята.Я строю некоторый тип приложения todo, который использует SQLite для хранения.На моей домашней странице я показываю список задач.Это выглядит примерно так: *ngFor="let todo of itemList" В списке все в порядке, но когда я перехожу на другую страницу, скажем, я перехожу на страницу, на которой я добавляю новый Todo, и процесс завершается, и я возвращаю страницу в корень, затем списоку меня есть дубликаты.Если я выхожу из приложения и открываю его снова, все возвращается в норму.Я где-то читал об этом, но я не совсем уверен в деталях, человек сказал, что это связано с подпиской и отпиской.Буду признателен, если кто-нибудь сможет мне помочь.Заранее спасибо.

Вот код компонента

public itemList : Array<Object>;

this.todoService.read().then((response: any)=>{
   this.itemList = <Array<Object>> response;
});

Служба, которая возвращает данные, выглядит как

read(){    
    return new Promise((resolve, reject) => {
      this.sqlite.create({
        name: DB_NAME,
        location: 'default'
      })
      .then((db: SQLiteObject) => {  
        db.executeSql('CREATE TABLE IF NOT EXISTS todos(id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(32), date VARCHAR(32), time VARCHAR(32), datetime VARCHAR(32))', {})
          .then(() => console.log("Created Table OR NOT"))
          .catch(e => this.presentAlert(e));

        db.executeSql('SELECT * FROM todos ORDER BY id DESC', {})
        .then((response) => {
          if(response.rows.length > 0){
            for(var i=0; i < response.rows.length; i++){
              this.my_todos.push({
                id:response.rows.item(i).id, 
                name:response.rows.item(i).name,
                date:response.rows.item(i).date,
                time:response.rows.item(i).time, 
                datetime:response.rows.item(i).datetime
              })
            }
          }
          resolve(this.my_todos);
        })
        .catch(e => this.presentAlert(JSON.stringify(e)));
      })
      .catch(e => this.presentAlert(JSON.stringify(e)));
    }); 

  }

1 Ответ

0 голосов
/ 04 июня 2018

В вашем read (), прежде чем вы нажмете, вам нужно убедиться, что this.my_todos равно [], если нет, то оно будет продолжать добавляться и, следовательно, у вас есть дубликаты.

//this.my_todos may not be [] here.
this.my_todos.push({
            id:response.rows.item(i).id, 
            name:response.rows.item(i).name,
            date:response.rows.item(i).date,
            time:response.rows.item(i).time, 
            datetime:response.rows.item(i).datetime
          })

установите this.my_todos в пустой массив, прежде чем отправлять данные, как показано ниже.

read(){
this.my_todos = [];  //this one  
return new Promise((resolve, reject) => {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...