這篇文章主要介紹了微信小程序跨頁面數據傳遞事件響應實現過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
在實際工作中有很多場景需要在第二個頁面中將用戶操作之后的將數據回傳到上一頁面。愛掏網 - 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();
第一個頁面中的處理
選擇城市所在城市 {{ cityName || '請選擇' }}
第二個頁面中的處理
城市列表
傳送門
github
總結
之所以將Storage定義成全局的,是為了保證第一個頁面放到Storage中和第二個頁面從 Storage 中取出的emitter是同一個實例,如此第一個頁面才能正確監聽到第二個頁面觸發的事件。愛掏網 - it200.com也可以使用 vuex,將 emitter 放到 state 中。愛掏網 - it200.com
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。愛掏網 - it200.com
聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。