最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序跨頁面數(shù)據(jù)傳遞事件響應實現(xiàn)過程解析

 更新時間:2019年12月19日 15:21:57   作者:子欽加油  
這篇文章主要介紹了微信小程序跨頁面數(shù)據(jù)傳遞事件響應實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

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

在實際工作中有很多場景需要在第二個頁面中將用戶操作之后的將數(shù)據(jù)回傳到上一頁面。接下來將我的方案分享給小伙伴。

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

實現(xiàn)思路

  • 創(chuàng)建一個 Emitter,用于事件處理
  • 創(chuàng)建一個全局的 Storage
  • 在第一個頁面創(chuàng)建一個 emitter 對象,并添加事件監(jiān)聽,將 emitter 存儲到 Storage 中
  • 在第二個頁面從 Storage 中取出 emitter 對象, 并觸發(fā)事件,將數(shù)據(jù)傳遞到第一個頁面中做處理

創(chuàng)建 Emitter

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

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

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

 listeners.push(listener);
 }

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

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

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

  this.off(event, proxyListener);
 }

 this.on(event, proxyListener);
 }

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

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

創(chuàng)建 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();

第一個頁面中的處理

<template>
 <div class="page">
 <div class="weui-cells__title">選擇城市</div>
 <div class="weui-cells weui-cells_after-title">
  <navigator :url="`../select/select?id=${cityId}`" class="weui-cell weui-cell_access" hover-class="weui-cell_active">
  <div class="weui-cell__hd weui-label">所在城市</div>
  <div class="weui-cell__bd" :style="{color: cityName || '#999'}">{{ cityName || '請選擇' }}</div>
  <div class="weui-cell__ft weui-cell__ft_in-access"></div>
  </navigator>
 </div>
 </div>
</template>

<script>
import Emitter from '../../utils/emitter';
import storage from '../../utils/storage';

export default {
 data() {
 return {
  cityId: '',
  cityName: '',
 }
 },
 onLoad() {
 const emitter = new Emitter();

 // 將emitter存到storage中
 storage.add('indexEmitter', emitter);

 // 添加事件監(jiān)聽
 emitter.on('onSelect', this.handleSelect);
 },
 methods: {
 // 事件處理
 handleSelect(data) {
  this.cityId = data.id;
  this.cityName = data.text;
 }
 }
}
</script>

第二個頁面中的處理

<template>
 <div class="page">
 <div class="weui-cells__title">城市列表</div>
 <div class="weui-cells weui-cells_after-title">
  <radio-group @change="handleChange">
  <label class="weui-cell weui-check__label" v-for="item in list" :key="item.id">
   <radio class="weui-check" :value="item.id" :checked="`${item.id}` === selectedId" />
   <div class="weui-cell__bd">{{ item.text }}</div>
   <div v-if="`${item.id}` === selectedId" class="weui-cell__ft weui-cell__ft_in-radio">
   <icon class="weui-icon-radio" type="success_no_circle" size="16" />
   </div>
  </label>
  </radio-group>
 </div>
 </div>
</template>

<script>
import storage from '../../utils/storage';

export default {
 data() {
 return {
  list: [
  { id: 0, text: '北京' },
  { id: 1, text: '上海' },
  { id: 2, text: '廣州' },
  { id: 3, text: '深圳' },
  { id: 4, text: '杭州' },
  ],
  selectedId: ''
 }
 },
 onLoad({ id }) {
 this.selectedId = id;
 
 // 取出 emitter
 this.emitter = storage.get('indexEmitter');
 },
 methods: {
 handleChange(e) {
  this.selectedId = e.detail.value;

  const item = this.list.find(({ id }) => `${id}` === e.detail.value);

  // 觸發(fā)事件并傳遞數(shù)據(jù)
  this.emitter.emit('onSelect', { ...item });
 }
 }
}
</script>

傳送門

github

總結(jié)

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 微信小程序完美解決scroll-view高度自適應問題的方法

    微信小程序完美解決scroll-view高度自適應問題的方法

    這篇文章主要介紹了微信小程序完美解決scroll-view高度自適應問題的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 用javascript做一個小游戲平臺 (二) 游戲選擇器

    用javascript做一個小游戲平臺 (二) 游戲選擇器

    昨天晚上“設計”了n久,那些代碼都還沒有運行起來,有點心急、有點郁悶。
    2010-01-01
  • JS getStyle獲取最終樣式函數(shù)代碼

    JS getStyle獲取最終樣式函數(shù)代碼

    定義一個id="flower"的div元素 并設置如上樣式,我們的目標就是通過javascript來獲取樣式的最終屬性
    2010-04-04
  • JS實現(xiàn)json的序列化和反序列化功能示例

    JS實現(xiàn)json的序列化和反序列化功能示例

    這篇文章主要介紹了JS實現(xiàn)json的序列化和反序列化功能,結(jié)合具體實例形式分析了javascript針對json的序列化與反序列化相關實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • 微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動

    微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)菜單左右聯(lián)動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 淺談javascript的原型繼承

    淺談javascript的原型繼承

    javascript的繼承在很多框架中都有運用,尤其是原型式繼承。首先要理解一個概念,什么是原型式繼承?所謂的原型式繼承,就是在函數(shù)內(nèi)部先創(chuàng)建一個臨時性的構造函數(shù),然后將傳入的對象做這個構造函數(shù)的原型,最后返回這個臨時類型的新實例
    2012-07-07
  • webpack2.0配置postcss-loader的方法

    webpack2.0配置postcss-loader的方法

    本篇文章主要介紹了webpack2.0配置postcss-loader的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • csdn 批量接受好友邀請

    csdn 批量接受好友邀請

    說實話,加好友的太多了,怎么辦,想個批量的辦法吧
    2009-02-02
  • 如何解決JavaScript中的數(shù)組長度不對的問題

    如何解決JavaScript中的數(shù)組長度不對的問題

    JavaScript?中的數(shù)組長度是一個比較常見的坑,理解數(shù)組長度的工作原理非常重要,下面就跟隨小編一起來了解下如何解決JavaScript中的數(shù)組長度不對的問題吧
    2024-12-12
  • javaScript字符串工具類StringUtils詳解

    javaScript字符串工具類StringUtils詳解

    這篇文章主要為大家詳細介紹了javaScript字符串工具類StringUtils,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論

凤阳县| 临泽县| 盈江县| 嵩明县| 金阳县| 怀宁县| 肇源县| 修武县| 石林| 正安县| 开原市| 资兴市| 张家口市| 微博| 集安市| 东乡县| 南江县| 鄂温| 宁波市| 封开县| 广宁县| 原平市| 磐安县| 萍乡市| 寿阳县| 临漳县| 明水县| 女性| 新竹县| 化州市| 荆州市| 清徐县| 福州市| 枣强县| 武宣县| 万年县| 永靖县| 汤阴县| 金平| 甘南县| 韶关市|