本文是對CPASS項目的技術要點和所踩的坑做一些總結。 項目一個提供移動辦公場地的小程序平臺。 使用美團mpvue框架, mpvue:1.0.13, mpvue-loader:1.0.15 靜態(tài)資源(除了tabbar圖標)放在阿里云oss
組件(頁面)間通信四種方式:
這里說一下比較少用的第三種通信方式。Bus應用于非父子組件通信,利用$emit,$on,$off分別來分發(fā)、監(jiān)聽、取消監(jiān)聽。 第一步:在mixins(混合)建一個文件event-bus.js import Vue from 'vue'; export default new Vue();復制代碼 第二步:在需要分發(fā)的組件中引入event-bus,再傳遞分發(fā)事件 import Bus from '@/mixins/event-bus' // 需要傳遞給兄弟組件的值 let params = { *** } Bus.$emit('getParams', params) 復制代碼 第三步:在需要監(jiān)聽的組件中引入event-bus,在created周期去監(jiān)聽事件(小程序周期監(jiān)聽無效),在 beforeDestroy 周期取消監(jiān)聽事件 import Bus from '@/mixins/event-bus' created () { // 監(jiān)聽事件 Bus.$on('getParams', params => { // to do something }) },beforeDestroy () { // 清除監(jiān)聽 Bus.$off('getParams'); }復制代碼 swiper選項卡 + 無限加載利用微信官方提供的swiper封裝一個無限數(shù)據(jù)加載的swiperTab選項卡。
空態(tài)下:
技術難點: swiper需要設置固定高度,觸底 onReachBottom 無限加載又需要高度。所以需要在swiper標簽設置動態(tài)高度 :style="{height: swiperHeight + 'px'}" 。 onLoad 周期獲取單個list-item的高度。假如所渲染數(shù)據(jù)有n組數(shù)據(jù),則swiper高度為: swiperHeight = baseHeight * n + 加載提示占位高度 。
如果頻繁切換swiper會導致卡死,是因為觸摸滑動swiper和點擊選項卡時賦值swiperIndex都會觸發(fā)swiper bindchange 事件,這里做了判斷處理。
scroll-view封裝indexList實現(xiàn)兩種定位方式:點擊定位,按住右側字母indexList滑動定位。
技術難點:按住右側indexList滑動定位,獲取字母indexList的上邊距 offsetTop ,按住滑動時獲取手指距離屏幕頂部的距離 clientY, 手指移動距離為 moveY=clientY-offsetTop, 具體實現(xiàn)如下:
坑view或者text設置border-radius=50%有時候在真機會變形(排除flex布局的影響)。 wxml不支持復雜邏輯,如模版字符串,字符串截取等等。 text設置行高的時候會出現(xiàn)樣式異常,替換成view便可解決此問題。 wx.showLoading和wx.showToast的屬性title不可為空,線上會報錯,影響js執(zhí)行。 總結本文只是簡單講一下項目中涉及到的幾處技術要點,歡迎交流。 打一波廣告:
|