принудительно перезагрузить представление в рамках ionic2

После прохождения Очистить историю и перезагрузить страницу при входе/выходе с помощью Ionic Framework

Я хочу знать тот же вопрос, но для ionic2 с использованием машинописного текста.

При входе и выходе мне нужно перезагрузить app.ts, потому что есть классы, которые запускают библиотеки при построении.

это будет в основном перенаправлено домой и перезагружено.


person Basit    schedule 01.03.2016    source источник


Ответы (7)


Ионный 1


Я не использовал Ionic 2, но в настоящее время я использую Ionic 1.2, и если они все еще используют ui-router, вы можете использовать reload: true в ui-sref

или вы можете добавить приведенный ниже код в свой контроллер выхода из системы.

$state.transitionTo($state.current, $stateParams, {
    reload: true,
    inherit: false,
    notify: true
});

Угловой 2


Использовать

$window.location.reload();

or

местоположение.перезагрузить();

person Siddharth Pandey    schedule 01.03.2016
comment
Я уже разместил ссылку на ответы ionic1 .. так что это действительно не помогает - person Basit; 01.03.2016
comment
Хорошо, позвольте мне попробовать, чем вернется к вам - person Siddharth Pandey; 01.03.2016
comment
Бро, ты используешь angular 2? - person Siddharth Pandey; 01.03.2016
comment
Да, ionic2 поставляется с angular2 - person Basit; 01.03.2016
comment
ты хочешь написать это в ответ, чтобы я мог принять это как ответ - person Basit; 01.03.2016
comment
Давайте продолжим это обсуждение в чате. - person Siddharth Pandey; 01.03.2016
comment
Это не работает для Ionic 2, в новой версии по-другому. - person Jorge Luis Jiménez; 17.03.2017

Нашел этот ответ здесь (обратите особое внимание на строку this.navCtrl.setRoot(this.navCtrl.getActive().component);, которая, безусловно, является самой простой решение, с которым я столкнулся, чтобы перезагрузить текущую страницу для Ionic 2 и 3 и более поздних версий Angular (у меня 4), поэтому кредит должен быть соответственно:

ОБНОВИТЬ ТЕКУЩУЮ СТРАНИЦУ

import { Component } from '@angular/core';
import { NavController, ModalController} from 'ionic-angular';

@Component({
  selector: 'page-example',
  templateUrl: 'example.html'
})
export class ExamplePage {

  public someVar: any;

  constructor(public navCtrl: NavController, private modalCtrl: ModalController) {

  }

  refreshPage() {
    this.navCtrl.setRoot(this.navCtrl.getActive().component);
  }

}

Если вы хотите ОБНОВИТЬ ДРУГУЮ СТРАНИЦУ, используйте следующее (примечание this.navCtrl.setRoot(HomePage);:

import { Component } from '@angular/core';
import { NavController, ModalController} from 'ionic-angular';
import { HomePage } from'../home/home';

@Component({
  selector: 'page-example',
  templateUrl: 'example.html'
})
export class ExamplePage {

  public someVar: any;

  constructor(public navCtrl: NavController, private modalCtrl: ModalController) {

  }

  directToNewPage() {
    this.navCtrl.setRoot(HomePage);
  }

}
person maudulus    schedule 19.05.2017
comment
И если я хочу обновить часть страницы, то как я могу это сделать? - person user2828442; 30.08.2018

Вы должны реализовать интерфейс CanReuse и переопределить routerCanReuse, чтобы вернуть false. Затем попробуйте позвонить router.renavigate().

Ваш компонент должен выглядеть так:

class MyComponent implements CanReuse {
  // your code here...
  routerCanReuse(next: ComponentInstruction, prev: ComponentInstruction) { 
    return false;
  }
}

И затем, когда вы выполняете вход/выход из системы, вызовите:

// navigate to home
router.renavigate()
person Diego Ponciano    schedule 01.03.2016

Это хак, но он работает.

Оберните логику, которая следует за настройкой вашего шаблона, в setTimeout, и это даст браузеру время на обновление:

/* my code which adjusts the ng 2 html template in some way */
setTimeout(function() {
    /* processing which follows the template change */
}, 100);
person kris    schedule 28.06.2016

Для ionic 2 это работает для меня, когда вы принудительно перезагружаете страницу, вызывая fireWillEnter на контроллере представления

viewController.fireWillEnter();
person paulitto    schedule 27.11.2016
comment
нам нужно добавить импорт для ionic2 @paulitto - person Yokesh Varadhan; 20.07.2017
comment
@YokeshVaradhan да, вам нужно импортировать его из ionic-angular - person paulitto; 20.07.2017

Вот что помогло мне обновить только текущую страницу-

Я пытаюсь вызвать функцию refreshMe, когда я вызываю onDelete со своей страницы просмотра,
Посмотрите, как выглядит мой файл page.ts-

 export class MyPage {
    lines of code goes here like 
    public arr1: any;
    public arr2: any;

    public constructor(private nav: NavController, navParams: NavParams) {
      this.nav = nav;

      this.arr1 = [];
      this.arr2 = [];
      // console.log("hey array");
    }  

    onDelete() {
       perform this set of tasks...
       ...
       ...
      refreshMe()
    }


    refreshMe() {
      this.nav.setRoot(MyPage);
    }
}

Это просто обновление только текущей страницы.
Мы также можем вызвать эту функцию из представления, если нам нужно:

<ion-col width-60 offset-30 (click)="refreshMe()">
   ....
   ....
</ion-col>
person S.Yadav    schedule 18.07.2017

Лично я использую эти три строки, чтобы полностью обновить компонент.

let active = this.navCtrl.getActive(); // or getByIndex(int) if you know it
this.navCtrl.remove(active.index);
this.navCtrl.push(active.component);

Вы можете использовать ionViewWillLeave() для отображения заставки во время перезагрузки компонента, а затем скрыть его с помощью ionViewDidEnter() после загрузки.

Надеюсь, поможет

person Jeremy Morant    schedule 25.01.2019