• Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解


    Ionic3.x 页面 pop反向传值,主要有两种方式:

         1 .利用ES6提供 Promise 对象

         2 利用Ionic3.x提供Event对象,观察者模式(publish/subscribe)

    1)利用ES6提供 Promise 对象

    这边假设有两个页面A页面, B页面, 情景如下,A跳转B页面,在B页面返回A页面需要给A页面选回的值。

    A页面代码

    <button (tap)="goToBPage()">跳转到B页面</button>

    ts 内容:

    import BPage from './BPage'
    export class APage{
    constructor(public navCtrl: NavController, public navParams: NavParams) {
    }
    // 用于pop 回调的 block
    callBackFromB =(params) => {
     return new Promise((resolve, reject) => {
     if(params){
      resolve('成功取到B页面返回的参数');
      console.log('B页面参数为: '+ params);
     }else{
      reject(‘取回B页面数据失败')
     }
     });
     }
     goToBPage (){
     this.navCtrl.push(BPage, {
     callback: this.callBackFromB
     })
     }
    }

    备注:Promise是由Es6提供的一个对象,new一个对象,有两个回调函数,一个是resove,一个是reject,resove是执行成功的回调,也就是我们调用 then执行的方法, reject是执行失败的回调,对应 是调用 catch方法 ,现在es7新出一async和await,async是对Promise的进一步封装,详情可具体看官方文档!

    B页面代码:

     ts内容:

    constructor(public navCtrl: NavController, public navParams: NavParams) {
    // 获取对面A传过来的回调方法
     this.callback = this.navParams.get("callback")
     
    }
     goBack(){
     let param = '我是要给A页面数据'
     this.callback(param).then(()=>{
     // pop返回方法
     this.navCtrl.pop();
     });
     }

    2.利用Ionic3.x提供Event对象,观察者模式(publish/subscribe)

    event对象主要有3个方法

    1.发布publish(topic, eventData)

    `参数一是发布事件名字,第二个参数就是要发送数据,其实还可以传送第三,第四...等,都 是可以传送数据的

    2.订阅 subscribe(topic, handler)

    参数一是要接收的事件铝管,第二个参数代表发布时传送的参数,如果发布有传第三个参数,同样的订阅的第三个参数就是对应的发布的第三个参数,以此类推....`

    3.取消订阅 unsubscribe(topic, handler)

    参数一是要取消订阅的事件的名称,第二是一个回调函数,返回值:如果被移除成功,返回true
    实现反向传值代码如下

    A页面代码

    ts代码

     goToBPage(){
     this.events.subscribe('bevents', (params) => {
      // 接收B页面发布的数据
      console.log('接收数据为: '+ paramsVar);
    
      // 取消订阅
      this.events.unsubscribe('bevents'); 
     })
     this.navCtrl.push(BPage);

    B页面代码

    ts代码

    goBack(){
     this.navCtrl.pop().then(() => {
     // 发布 bevents事件
     this.events.publish('bevents', '我是B页面数据');
     });
    }
    sometimes the hardest part isn't letting go,but rather start over
  • 相关阅读:
    Linux共享对象之编译参数fPIC
    如果重新设计网络,有没有可能合并IP地址跟MAC地址?
    HTTP的长连接和短连接
    Icon资源详解[2]
    Icon资源详解[1]
    LZMA demo挑选使用备忘
    SSM 拦截器验证权限和登录与注销的实现
    Intellij idea workflow 工作流插件安装
    C# HttpWebRequest post 请求传参数
    PLSQL 11注册码
  • 原文地址:https://www.cnblogs.com/zhumeiming/p/10182546.html
Copyright © 2020-2023  润新知