微信小程序跨頁面數據傳遞事件響應實現過程解析

這篇文章主要介紹了微信小程序跨頁面數據傳遞事件響應實現過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在實際工作中有很多場景需要在第二個頁面中將用戶操作之后的將數據回傳到上一頁面。愛掏網 - it200.com接下來將我的方案分享給小伙伴。愛掏網 - it200.com 本次示例采用 uni-app 框架和 weui 樣式庫 實現思路 創建一個 Emitter,用于事件處理 創建一個 ...

在實際工作中有很多場景需要在第二個頁面中將用戶操作之后的將數據回傳到上一頁面。愛掏網 - it200.com接下來將我的方案分享給小伙伴。愛掏網 - it200.com

本次示例采用 uni-app 框架和 weui 樣式庫

實現思路

  • 創建一個 Emitter,用于事件處理
  • 創建一個全局的 Storage
  • 在第一個頁面創建一個 emitter 對象,并添加事件監聽,將 emitter 存儲到 Storage 中
  • 在第二個頁面從 Storage 中取出 emitter 對象, 并觸發事件,將數據傳遞到第一個頁面中做處理

創建 Emitter

function isFunc(fn) {
 return typeof fn === 'function';
}

export default class Emitter {
 constructor() {
 this._store = {};
 }

 /**
 * 事件監聽
 * @param {String} event 事件名
 * @param {Function} listener 事件回調函數
 */
 on(event, listener) {
 const listeners = this._store[event] || (this._store[event] = []);

 listeners.push(listener);
 }

 /**
 * 取消事件監聽
 * @param {String} event 事件名
 * @param {Function} listener 事件回調函數
 */
 off(event, listener) {
 const listeners = this._store[event] || (this._store[event] = []);

 listeners.splice(listeners.findIndex(item => item === listener), 1);
 }

 /**
 * 事件監聽 僅監聽一次
 * @param {String} event 事件名
 * @param {Function} listener 事件回調函數
 */
 once(event, listener) {
 const proxyListener = (data) => {
  isFunc(listener) && listener.call(null, data);

  this.off(event, proxyListener);
 }

 this.on(event, proxyListener);
 }

 /**
 * 觸發事件
 * @param {String} 事件名
 * @param {Object} 傳給事件回調函數的參數
 */
 emit(event, data) {
 const listeners = this._store[event] || (this._store[event] = []);

 for (const listener of listeners) {
  isFunc(listener) && listener.call(null, data);
 }
 }
}

創建 Storage

export class Storage {
 constructor() {
 this._store = {};
 }

 add(key, val) {
 this._store[key] = val;
 }
 
 get(key) {
 return this._store[key];
 }
 
 remove(key) {
 delete this._store[key];
 }
 
 clear() {
 this._store = {};
 }
}

export default new Storage();

第一個頁面中的處理

第二個頁面中的處理

傳送門

github

總結

之所以將Storage定義成全局的,是為了保證第一個頁面放到Storage中和第二個頁面從 Storage 中取出的emitter是同一個實例,如此第一個頁面才能正確監聽到第二個頁面觸發的事件。愛掏網 - it200.com也可以使用 vuex,將 emitter 放到 state 中。愛掏網 - it200.com

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。愛掏網 - it200.com


聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 奇米影视7777久久精品| 色狠台湾色综合网站| 久久综合给合久久狠狠狠97色| 久久久久国产午夜| 香蕉久久夜色精品升级完成| 最近的中文字幕视频完整| 国产精品亚洲一区二区无码| 亚洲国产精品成人综合色在线婷婷| 久人人爽人人爽人人片AV| 97碰公开在线观看免费视频| 日韩高清在线日韩大片观看网址| 国产情侣一区二区三区| 亚洲精品成人图区| 久久88色综合色鬼| 美女扒开尿口给男人爽免费视频| 成年女人男人免费视频播放| 国产步兵社区视频在线观看| 亚洲av无码不卡一区二区三区| 99久久超碰中文字幕伊人| 波多野结av衣东京热无码专区| 国模视频一区二区| 动漫人物一起差差差漫画免费漫画| 一级毛片试看三分钟| 蹂躏国际女刑警之屈服| 欧美日韩激情在线| 宝宝你里面好烫很软不想出来| 国产卡1卡2卡三卡网站免费| 亚洲女人影院想要爱| maomiav923| 欧美激情另欧美做真爱| 国产精品v片在线观看不卡| 亚洲精品国精品久久99热| 1区2区3区产品乱码免费| 深夜的贵妇无删减版在线播放| 国产精品视频久久久久| 亚洲视频一区在线| www.米奇777.com| 美国式禁忌5太大了| 无码天堂亚洲国产AV| 免费在线一级毛片| 5g996未满十八|