ionic3页面间数据传递及Events

本文详细介绍了在Ionic框架中如何在页面间进行导航,并通过多种方式传递数据,包括使用push(), [navParams], modal的create方法及Events发布订阅事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请使用手机"扫一扫"x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值