1.將數(shù)據(jù)傳遞到要跳轉(zhuǎn)到的頁面
(1)push()
要將新頁面推送到堆棧匣吊,可使用push方法盒件。同時(shí)也可以通過將數(shù)據(jù)傳遞給push方法的第二個(gè)參數(shù),來將數(shù)據(jù)傳遞給下一個(gè)頁面昂灵。
import {LoginPage } from'./login';
...
pushPage(){
this.navCtrl.push(LoginPage, {
id: 123,
name: "Carl"
});
(2)[navParams]屬性:
import {LoginPage } from'./login';
...
@Component()
class MyPage {
params;
pushPage: any;
constructor(){
this.pushPage= LoginPage;
this.params ={
id:123,
name: "Carl"
};
}
}
然后在模板中跳轉(zhuǎn):
<button ion-button [navPush]="pushPage [navParams]="params">
Go
</button>
(3)modal的create方法(與push()同理避凝,數(shù)據(jù)作為create()方法的第二個(gè)參數(shù))
import {LoginPage } from'./login';
...
presentLoginPage() {
let modal =this.modalCtrl.create(LoginPage ,
{ id:123,name: "Carl"}
);
modal.present();
}
數(shù)據(jù)傳遞到下個(gè)頁面后,該頁面如何接收呢眨补?
用NavParams來接收數(shù)據(jù)管削。
首先導(dǎo)入NavParams ,然后注入到構(gòu)造函數(shù)撑螺。
import { NavParams } from 'ionic-angular';
...
userInfo;
constructor(public params: NavParams) {
this.userInfo = params.data;
}
這就可以得到整個(gè)對(duì)象含思。也可以使用params的get()方法接收,傳入對(duì)象的屬性名作為get()的參數(shù)
this.params.get('id');
則將得到:123
2.將數(shù)據(jù)傳遞到Tabs的頁面甘晤,用[rootParams]屬性:
首先將數(shù)據(jù)按上方法傳遞到Tabs并接收(比如接收為userInfo)含潘,然后在Tabs模板中將數(shù)據(jù)傳遞到要傳遞的頁面:
<ion-tabs>
...
<ion-tab [root]="tab1Root" tabTitle="home" tabIcon="home" [rootParams]="userInfo">
</ion-tab>
...
</ion-tabs>
加入[rootParams]屬性,將把數(shù)據(jù)userInfo傳遞到該頁面安皱,然后在該頁面再用params接收即可调鬓。
3.使用Events發(fā)布訂閱事件:
上面所說的方法,只能傳遞到要跳轉(zhuǎn)到的頁面酌伊。
如果要把數(shù)據(jù)傳遞到任何一個(gè)頁面腾窝,使用Events缀踪,官網(wǎng)點(diǎn)這里 。
發(fā)布頁面:
import { Events } from 'ionic-angular'; //導(dǎo)入
...
export class EventsPage {
user = '來自Events的數(shù)據(jù)'
constructor(public events: Events) {}
publishEvents(user) {
console.log('User created!')
this.events.publish('user:created',this.user, Date.now());
console.log(this.user)
}
}
要接收數(shù)據(jù)的頁面(訂閱頁面):
import { Component} from '@angular/core';
import { Events } from 'ionic-angular';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
myEvent;
constructor(public events: Events) {
events.subscribe('user:created', (user, time) => {
HomePage.prototype.myEvent = user;
});
}
}
注意:訂閱必須在發(fā)布之前虹脯,不然接收不到驴娃。打個(gè)比喻:比如微信公眾號(hào),你要先關(guān)注才能接收到它的推文循集,不然它再怎么發(fā)推文唇敞,你也收不到。也就是說咒彤,接收頁面必須在發(fā)布頁面前被加載過疆柔。