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