美文网首页程序员
Ionic3三种跳转方法对应的页面间数据传递

Ionic3三种跳转方法对应的页面间数据传递

作者: ceido | 来源:发表于2017-10-23 12:48 被阅读0次
    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; 
        });
      }
    }
    

    注意:订阅必须在发布之前,不然接收不到。打个比喻:比如微信公众号,你要先关注才能接收到它的推文,不然它再怎么发推文,你也收不到。也就是说,接收页面必须在发布页面前被加载过。

    如有错误,请大佬们指出,不胜感激!

    相关文章

      网友评论

        本文标题:Ionic3三种跳转方法对应的页面间数据传递

        本文链接:https://www.haomeiwen.com/subject/hfrnuxtx.html