1. 程式人生 > >ionic3頁面間資料傳遞及Events

ionic3頁面間資料傳遞及Events

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';  ... userInfo; 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-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;      });   } } 訂閱必須再發布之前,不然接收不到。打個比喻:比如微信公眾號,你要先關注才能接收到它的推文,不然它再怎麼發推文,你也收不到。 另外,.subscribe()方法中有點this作用域的問題,可以簡單粗暴的用原型指定:HomePage.prototype.myEvent

如有錯誤,請大佬們指出,不勝感激!

---------------------  作者:神奇的小卷毛  來源:CSDN  原文:https://blog.csdn.net/qq993284758/article/details/77679283  版權宣告:本文為博主原創文章,轉載請附上博文連結!