ionic3 返回上一頁,并刷新

無參數(shù)

通常情況,返回上一頁并刷新,只需在上一頁的Page生命周期(如ionViewWillEnter)中,調(diào)用刷新方法即可。本次介紹一種特殊情況的刷新處理:多頁面情況下,Page2返回到Page1,而Page1是Tabs時(shí),Page3是Page1的Tab。當(dāng)Page3 通過app.getRootNav().push()進(jìn)入Page2時(shí),Page2返回到Page1,那么Page3是不會(huì)觸發(fā)生命周期的。解決方案如下:

  • TwoPage(不需要處理)
@xxxxx
export class HomePage{
    constructor(){}
}
  • ThreePage
@xxxxx
export class ThreePage{
    constructor(){}
    //刷新
    onRefresh(){
      //do something
    }
}
  • OnePage
@xxxxx
export class OnePage{

     @ViewChild(Tabs) tabRef: Tabs;
      
      constructor(){}

     ionViewDidEnter() {
        let tab = this.tabRef.getSelected();
        if (tab != null) {
            let page = tab.getActive().instance;
            if (page) {
                if (page instanceof ThreePage) {
                    page.onRefresh();
                } 
            }
        }
    }
}

傳參給上一頁(觸發(fā)事件型,如點(diǎn)擊button,返回上一頁)

Page2傳參給Page1,本次以App.getRootNav().push App.getRootNav().pop的跳轉(zhuǎn),返回為例。

Events

  • OnePage
@xxxxx
export class OnePage{
    constructor(public navCtrl: NavController,
                      public navParams: NavParams,
                      public events: Events){}

    ionViewDidLoad(){
        this.events.subscribe('refresh', (backData) => {
              //backData就是TwoPage返回的數(shù)據(jù)         
              //this.onRefresh()
        });
    }

    //刷新
    onRefresh(){
      //do something
    }
}
  • TwoPage
@xxxxx
export class TwoPage{
    constructor(public navCtrl: NavController,
                      public navParams: NavParams,
                      public app: App,
                      public events: Events){}

    ionViewDidLoad(){
       
    }
   
    //觸發(fā)事件
    onEvent(){
         this.app.getRootNav().pop().then(() => {
                this.events.publish('refresh', yourData);
            });
    }
}

Promise

  • OnePage
@xxxxx
export class OnePage{
    constructor(public navCtrl: NavController,
                      public navParams: NavParams,
                      public app: App,
                      ){}

    ionViewDidLoad(){

    }

    //刷新
    onRefresh(){
      //do something
    }

    jumpToTwoPage(){
         this.app.getRootNav().push('TwoPage', {callback: this.getBackData});
    }
    
    getBackData= (backData) => {
        return new Promise((resolve, reject) => {        
             //backData就是TwoPage返回的數(shù)據(jù)         
              //this.onRefresh()
              resolve();
        });
}
  • TwoPage
@xxxxx
export class TwoPage{  

    callback;
    constructor(public navCtrl: NavController,
                      public navParams: NavParams,
                      public app: App){
          this.callback = this.navParams.get("callback");
    }

    //觸發(fā)事件
    onEvent(){
         if (this.callback) {
            this.callback(this.addressInfo).then(() => {
                this.app.getRootNav().pop();
            });
        }
    }
}

傳參給上一頁(物理鍵返回)

emmmm... 沒有遇到過這種場(chǎng)景,如果有,那就將參數(shù)保存在localStorage →_→

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容