一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

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

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

在實際工作中有很多場景需要在第二個頁面中將用戶操作之后的將數據回傳到上一頁面。愛掏網 - 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 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 欧美日韩视频一区二区 | 中文字幕欧美日韩 | 国产自产21区 | 欧美精品99久久久 | 亚洲福利网站 | 国产伦精品一区二区三区免费视频 | 欧美中文字幕在线 | 色黄大色黄女片免费中国 | 日韩欧美不卡 | 精品亚洲国产成人av制服丝袜 | 国产精品成人国产乱 | 成人网av | 亚洲成人精品在线观看 | 成人免费毛片嘿嘿连载视频 | aaaaaa毛片 | 日韩午夜精品 | 综合网av| 亚洲视频一区二区三区四区 | 91av在线播放 | 日韩一区二区免费视频 | 久久中文网 | 日韩国产一区二区 | 亚洲伊人影院 | 男人午夜视频 | 日韩一区二区在线视频 | 久久久久久中文字幕 | 久久精品99久久久久久 | 国产综合第一页 | 青青草久久| 国产精品久久久久久久久借妻 | 欧美不卡一区二区三区 | 国产精品免费一区 | 欧美二三区 | 欧美性大战xxxxx久久久 | 亚洲成人免费 | 日本黄色录像 | 国产高清视频一区 | 国产盗摄一区二区三区 | 亚洲性天堂 | 国产1级片 | 蜜桃精品噜噜噜成人av |