日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小程序引用其他页面js_来聊聊小程序页面之间如何通信

發布時間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小程序引用其他页面js_来聊聊小程序页面之间如何通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小程序頁面之間如何通信?

首先將通信的模型列舉出來, 分為以下幾種

  • 兄弟頁面間通信
  • 父路徑頁面向子路徑頁面通信
  • 子路徑頁面向父路徑頁面通信

通信的方式

  • localStorage 本地存儲
  • globalData 全局對象
  • eventBus 發布訂閱
  • PageModel 緩存整個pageModel至globalData

LocalStorage

利用onShow/onHide激活方法,通過localStorage傳遞數據

onShow(){ let newHello = wx . getStorageSync ( '__data'); if (newHello ){ this .setData({ helloMsg: newHello }); // 清空上次通信數據 wx.clearStorageSync ( '__data' ); }}

GlobalData

同localStorage一樣,利用onShow/onHide激活方法,通過讀寫小程序globalData完成數據傳遞

let app = getApp(); onShow(){ let newHello = app.$$data.helloMsg; if (newHello){ this.setData({ helloMsg: newHello }); // 清空上次通信數據 app.$$data.helloMsg =null; } }

EventBus

eventBus基本適用合任何JS可以運行的環境, 通過訂閱一個事件,然后再發布事件的時間點收到消息

// 首先你得實現一個eventBus, 這里假設你已經實現了..// Page A onLoad(){ app.pubSub.on('hello',(msg)=>{ this.setData({ helloMsg:'hello :'+ msg }); }); },// Page B onLoad(){ app.pubSub.emit('hello', 'JS每日一題') },

PageModel

緩存頁面PageModel, 通信時,直接找到要通信頁面的PageModel,進而可以訪問通信頁面PageModel所有的屬性,方法

// 在app.js中add及get實現 this.$$cache ={} add(pageModel){ // 添加時以__route__做為key,方便在其它頁面調用 let pagePath =this.__route__; this.$$cache[pagePath]= pageModel; } get(pagePath){ // 同時直接取走相應的pageModel return this.$$cache[pagePath]; }// Page A 在onLoad 時將本身(this)存放到GlobalData中 onLoad(){ app.pages.add(this); },// Page B onLoad(){ // 拿到Page A所有屬性及方法 console.log(app.pages.get( 'pages/a/b'))},

總結

  • localstorage 同步會阻塞進程,異步可能會錯過最佳取值時機
  • globalData 直接操作內存,比localstorage更快,注意全局變量污染
  • eventBus 方便靈活,推薦使用,注意解綁及重復綁定
  • PageModel 思路很棒,但globalDatac存放的pageModel過多時內存會不會爆不知道~_~

總結

以上是生活随笔為你收集整理的小程序引用其他页面js_来聊聊小程序页面之间如何通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。