Ionic 4 обновить вкладку каждый раз, когда я вхожу - PullRequest
0 голосов
/ 11 июня 2019

Я использую вкладки и не могу обновлять страницу каждый раз, когда я снова захожу на страницу. Я использую ionic 4, поэтому я не могу использовать navController.

Я использовал ionViewWillEnter() для отображения данных из базы данных в моем приложении, и это работает, но каждый раз, когда я перехожу на другую страницу и возвращаюсь на страницу, она повторяет данные. (например, я отображаю 5 данных из базы данных. Когда я перехожу на другую страницу и повторно захожу на страницу, она отображает 10 (повторяя те же данные), затем 15, 20, 25 ... и т. д.).

food.page.html

<ion-list  *ngIf="showFood">
    <ion-row *ngFor='let FoodFruit of showTypeOfFood("fruit")'>
        <ion-col>
            <ion-card>
                <div class="card-title">{{FoodFruit.wtitle}}</div>
            </ion-card>
        </ion-col>
    </ion-row>
</ion-list>

food.page.ts

ionViewWillEnter(){
    this.currentUser = this.afAuth.auth.currentUser;

    if(this.currentUser == null){
     this.showFood = false;
    }
    else{
      this.showPersonalFood();
    }
}

showPersonalFood(){
    this.afAuth.auth.onAuthStateChanged(
    (user)=>{
      if(user){
        this.showFood = true;

    this.afDatabase.object('foods/').snapshotChanges().subscribe(
      (action)=>{
            if(action.payload.val())
            {
              console.log(action.payload.val());
              let items: any = action.payload.val();
              items.forEach(
                (food) =>{
                  this.foods.push(food);
                }
              );
            }
            else
            {
              console.log("No Data");
            }
          });
      }
    }
  );

}
showTypeOfFood(type)
  {
    let items:any = [];
    this.foods.forEach((Food)=>{
      if(Food.wtype == type)
      {
        items.push(Food);

      }
    });
    return items;
    }

Здесь showTypeOfFood - это просто функция для отображения данных из базы данных. Таким образом, он отлично показывает данные на вкладке «Еда», но не обновляет, не очищает кэш и не удаляет предыдущие данные. Как мне этого добиться?

1 Ответ

0 голосов
/ 11 июня 2019

Проблема в том, что Ionic плохо справляется с обновлением страниц. И если вы спросите создателей Ionic, это не ошибка, а особенность ...

Но есть способы купить его:

"Делай, что просишь, но не делай так"

Присвойте своей странице атрибут, который будет меняться при каждом входе (например, отметку времени), чтобы Ionic был вынужден обновить страницу, обрабатывая ее как новую.

Почему бы вам не сделать это:
Если вы сделаете это, вы перегрузите память, и ваше приложение может вылететь

"Технически вы не обновляете страницу, только данные, но это делают свою работу"

Сначала сделайте все в ionViewDidEnter () (так что все будет сделано, когда вы полностью войдете в страницу).

Тогда вы должны:

  • Объявить атрибут:

    класс экспорта VisionnagePage реализует OnInit { public YourVar = []; // вы получаете к нему доступ через this.YourVar конструктор(){} }

  • очистить глобальную переменную при входе на страницу

  • положить предметы в эту переменную.
  • Прочитайте это (как вы читали showTypeOfFood("fruit"))
...