mpvue“踩坑”指南

logo.png

mpvue是一個使用 Vue.js 開發(fā)小程序的前端框架些楣。框架基于 Vue.js 核心悼瓮,框架整體和vue語法保持一致戈毒,整體開發(fā)體驗良好。但是越往深處走横堡,越會發(fā)現(xiàn)一些問題埋市。

1. 同一個頁面被多次打開所引發(fā)的問題

首先是有這么一個需求,從 主頁 -> 我的關(guān)注 -> 別人的主頁命贴, 主頁 這個模塊被打開了兩次

tim 20180906170054

我拍拍胸脯對產(chǎn)品說:沒問題道宅!
5b7642e297f95b96f760e1ebd1a5fe8

這個需求是沒毛病的,就是當我們從 別人的主頁 -> 我的關(guān)注 -> 主頁 的時候胸蛛,我的信息變成了我剛剛打開的那個人的信息污茵,這TM...

c1c9222bc38d90488d68e69edd57ed5

不要慌,有些事情需要我們 “摸索”

4413457d05dbb078781964138ddc0f3

在 mpvue 路由 Page A -> Page A -> Back 的時候葬项,其實數(shù)據(jù)公用了一個對象泞当,不知道為什么mpvue會這么設(shè)計,在官方解決這個問題之前這里引用了 @maimake的解決辦法

首先創(chuàng)建一個hack文件 /src/util/Hack.js

const pageDatas = {}

export default {
  install(_Vue) {
    // 添加全局方法或?qū)傩?    _Vue.prototype.$isPage = function isPage() {
      return this.$mp && this.$mp.mpType === 'page'
    }
    
    _Vue.prototype.$pageId = function pageId() {
      let pid = null
      try {
        pid = this.$isPage() ? this.$mp.page.__wxWebviewId__ : null
      } catch (e) { }
      return pid
    }
    
    // 注入組件
    _Vue.mixin({
      
      methods: {
        stashPageData() {
          return { data: { ...this.$data } }
        },
        restorePageData(oldData) {
          Object.assign(this.$data, oldData.data)
        },
      },
      
      onLoad() {
        if (this.$isPage()) {
          // 新進入頁面
          Object.assign(this.$data, this.$options.data())
        }
      },
      
      onUnload() {
        if (this.$isPage()) {
          // 退出頁面民珍,刪除數(shù)據(jù)
          delete pageDatas[this.$pageId()]
          this.$needReloadPageData = true
        }
      },
      
      onHide() {
        if (this.$isPage()) {
          // 將要隱藏時襟士,備份數(shù)據(jù)
          pageDatas[this.$pageId()] = this.stashPageData()
        }
      },
      
      onShow() {
        if (this.$isPage()) {
          // 如果是后退回來的,拿出歷史數(shù)據(jù)來設(shè)置data
          if (this.$needReloadPageData) {
            const oldData = pageDatas[this.$pageId()]
            if (oldData) {
              this.restorePageData(oldData)
            }
            this.$needReloadPageData = false
          }
        }
      },
      
    })
  },
}

在main.js中引入 /src/main.js

import Vue from 'vue'
import App from './App'
import Hack from './utils/Hack'


Vue.config.productionTip = false
App.mpType = 'app'
Vue.use(Hack)

const app = new Vue(App)
app.$mount()

測試后發(fā)現(xiàn)ok了嚷量,但是這只是一個臨時解決方案陋桂,治標不治本,還是希望官方盡快解決蝶溶。

2. scroll-view 組件的一些問題

其實吧嗜历,我并不推薦使用這個組件,也不是mpvue的問題,就是這個組件本身就不太好用梨州。

  • 事件觸發(fā)不了的問題
    在mpvue中使用下面的一些事件的時候是不會觸發(fā)的
  • bindscrolltolower
  • bindscrolltoupper
  • bindscroll

解決方法你猜是什么痕囱?就是把bind去掉,哈哈哈

  • scrolltolower
  • scrolltoupper
  • scroll

然而暴匠,當 scroll-view 高度為 100% 的時候 bindscrolltolower 又不執(zhí)行了咐蝇,解決方法是給外面的父元素加一些限制

<div class="cat-scroll">
    <scroll-view style="height: 100%; width: 100%">
    </<scroll-view>
</div>
.cat-scroll {
position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  overflow: hidden;
}

這樣就解決了,但但但但但但但但是巷查,這樣鋪滿屏幕后和小程序的下拉刷新沖突了,導(dǎo)致下拉刷新不執(zhí)行抹腿。WTF

c1c9222bc38d90488d68e69edd57ed5

回到我們開頭說的不用 scroll-view 我們用別的方法解決岛请。首先我們使用 scroll-view的原因一般就是做一個下拉加載更多么,在小程序中頁面全局有一個滾動到底部的事件 onReachBottom 我們只需要在這個事件里面寫上拉加載更多就好了警绩,和下拉刷新也不沖突崇败。

export default {
    onPullDownRefresh(){
        //  下拉刷新
    },
    onReachBottom(){
        // 上拉加載更多
    }
}

3. slot 嵌套子模板的問題

在新版本的mpvue中支持了 slot 這個功能,但是我勸大家不要用肩祥。問題很多后室,父子之間傳值有各種問題,我也沒找到很好的解決辦法混狠,希望官方和社區(qū)繼續(xù)完善岸霹。

本文同步發(fā)表在github https://github.com/Jon-Millent/blog/issues

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市将饺,隨后出現(xiàn)的幾起案子贡避,更是在濱河造成了極大的恐慌,老刑警劉巖予弧,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刮吧,死亡現(xiàn)場離奇詭異,居然都是意外死亡掖蛤,警方通過查閱死者的電腦和手機杀捻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚓庭,“玉大人致讥,你說我怎么就攤上這事”胫茫” “怎么了拄踪?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拳魁。 經(jīng)常有香客問我惶桐,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任姚糊,我火速辦了婚禮贿衍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘救恨。我一直安慰自己贸辈,他們只是感情好,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布肠槽。 她就那樣靜靜地躺著擎淤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秸仙。 梳的紋絲不亂的頭發(fā)上嘴拢,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天,我揣著相機與錄音寂纪,去河邊找鬼席吴。 笑死,一個胖子當著我的面吹牛捞蛋,可吹牛的內(nèi)容都是我干的孝冒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拟杉,長吁一口氣:“原來是場噩夢啊……” “哼庄涡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搬设,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤啼染,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后焕梅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迹鹅,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年贞言,在試婚紗的時候發(fā)現(xiàn)自己被綠了斜棚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡该窗,死狀恐怖弟蚀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酗失,我是刑警寧澤义钉,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站规肴,受9級特大地震影響捶闸,放射性物質(zhì)發(fā)生泄漏夜畴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一删壮、第九天 我趴在偏房一處隱蔽的房頂上張望贪绘。 院中可真熱鬧,春花似錦央碟、人聲如沸税灌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽菱涤。三九已至,卻和暖如春洛勉,著一層夾襖步出監(jiān)牢的瞬間狸窘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工坯认, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人氓涣。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓牛哺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親劳吠。 傳聞我的和親對象是個殘疾皇子引润,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 目錄 UI組件 開發(fā)框架 實用庫 服務(wù)端 輔助工具 應(yīng)用實例 Demo示例 UI組件 element★13489 ...
    余生社會閱讀 19,738評論 7 233
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 生活充滿儀式感,每天都有新鮮感蠢古。 今年的520奴曙,正值狗狗上班我休息的日子,這么重要的日子怎么能錯過呢草讶?洽糟!下午獨自踏...
    窗外_6ac6閱讀 328評論 2 2
  • 滿城送玫瑰花的、捧玫瑰花的和抱玫瑰花的堕战,無論是那一類坤溃,臉上的笑容都很美。在這美麗的節(jié)日最適合表達愛意嘱丢,送1朵玫瑰代...
    菱520閱讀 196評論 0 0