ionic3页面间数据传递及Events
2018-07-21 本文已影响188人
走停2015_iOS开发
1.将数据传递到要跳转到的页面
(1)push()
要将新页面推送到堆栈,可使用push方法。同时也可以通过将数据传递给push方法的第二个参数,来将数据传递给下一个页面。
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" };
}
然后在模板中跳转:
<button ion-button [navPush]="pushPage [navParams]="params"> Go</button>
(3)modal的create方法(与push()同理,数据作为create()方法的第二个参数)
import {LoginPage } from'./login';
presentLoginPage() { let modal =this.modalCtrl.create(LoginPage ,
{ id:123,
name: "Carl"
} );
modal.present();}
数据传递到下个页面后,该页面如何接收呢?
用NavParams来接收数据。
首先导入NavParams ,然后注入到构造函数。
import { NavParams } from 'ionic-angular';
constructor(public params: NavParams) {this.userInfo = params.data; }
这就可以得到整个对象。也可以使用params的get()方法接收,传入对象属性作为get()的参数
this.params.get('id');
则将得到:123
2.将数据传递到Tabs的页面,用[rootParams]属性:
首先将数据按上方法传递到Tabs并接收(比如接收为userInfo),然后在Tabs模板中将数据传递到要传递的页面:
<ion-tabs>
<ion-tab [root]="tab1Root" tabTitle="home" tabIcon="home" [rootParams]="userInfo"> </ion-tab>
<ion-tab [root]="tab1Root" tabTitle="home" tabIcon="home" [rootParams]="userInfo"> </ion-tab>
</ion-tabs>
加入[rootParams]属性,将把数据userInfo传递到该页面,然后在该页面再用params接收即可。
3.使用Events发布订阅事件:
上面所说的方法,只能传递到要跳转到的页面。
如果要把数据传递到任何一个页面,使用Events,官网点这里 。
发布页面:
import { Events } from 'ionic-angular'; //导入
export class EventsPage { user = '来自Events的数据'
constructor(public events: Events) {}
publishEvents(user) { console.log('User created!')
this.events.publish('user:created',this.user, Date.now()
); console.log(this.user)
}}
要接收数据的页面(订阅页面):
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;
});
}}