無參數(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 →_→