1. 程式人生 > >npmvue構建微信小程式

npmvue構建微信小程式

原文連結:https://www.cnblogs.com/zhouyangla/p/9000879.html

前言

16年小程式剛出來的時候,就準備花點時間去學學。無奈現實中手上專案太多,一個接著一個,而且也沒有開發小程式的需求,所以就一拖再拖。

直到上週,終於有一個小程式的專案。如果現在學小程式,時間上肯定來不及了(就給了一週的時間)。正好前段時間看到美團開源了一個使用vue來開發微信小程式的框架 mpvue。因為平時vue用的多,所以就決定使用 mpvue 來開發。

mpvue 介紹

我們看一下mpvue官網上的介紹:

mpvue 是一個使用 Vue.js 開發小程式的前端框架。框架基於 Vue.js 核心,mpvue 修改了 Vue.js 的 runtime

 和 compiler實現,使其可以執行在小程式環境中,從而為小程式開發引入了整套 Vue.js 開發體驗。

mpvue 優勢

  1. 徹底的元件化開發能力:提高程式碼複用性
  2. 完整的 Vue.js 開發體驗
  3. 方便的 Vuex 資料管理方案:方便構建複雜應用
  4. 快捷的 webpack 構建機制:自定義構建策略、開發階段 hotReload
  5. 支援使用 npm 外部依賴
  6. 使用 Vue.js 命令列工具 vue-cli 快速初始化專案
  7. H5 程式碼轉換編譯成小程式目的碼的能力

開發過程

通過 Vue.js 命令列工具 vue-cli,你只需在終端視窗輸入幾條簡單命令,即可快速建立和啟動一個帶熱過載、儲存時靜態檢查、內建程式碼構建功能的小程式專案:

# 建立一個基於 mpvue-quickstart 模板的新專案
$ vue init mpvue/mpvue-quickstart my-project

# 安裝依賴
$ cd my-project
$ npm install
# 啟動構建
$ npm run dev

接下來,你只需要啟動微信開發者工具,引入專案即可預覽到你的第一個 mpvue 小程式。

下面是一個專案目錄結構。

和開發vue完全一樣,不過需要注意的是,小程式不支援dom操作,所以vue中的 ref 也不能使用。

其它基礎可以看mpvue官網,上面有詳細的使用說明。下面主要說一個在開發過程中遇到的坑。

mpvue開發中遇到的問題

1.路由跳轉

vue中 使用 vue-router 來進行路由跳轉的。mpvue中只需要用 a 標籤就行了。

<a href="/page/counter/main?text=123">

同時也可以使用小程式自身提供的api完成頁面跳轉

 wx.navigateTo({
   url: `/pages/counter/main?text=${this.text}`
 });

2.input框游標位置

在input輸入框內輸入內容時,當我想修改前面已經輸入好的文字,把游標移動到需要修改的位置。
修改完之後,游標自動跑到最後了,這樣給使用者體驗不好。

  <input type="text" v-model="text">

可以使用 v-model.lazy 但是 lazy 在輸入框失去焦點時才能觸發。可以使用setTimeout來延遲執行。

  <input type="text" v-model.lazy="text">
  
  setTimeout(() => {
      ...
      let ipt = this.text;
      ... 
  },100)
  

這樣就能解決了。

3.彈出層滾動穿透

寫了一個簡單的彈窗,發現滾動彈出層裡的內容,後面的內容也跟著滾動。開始以為阻止冒泡就行了。結果試了一下,還是不行。在 issues 裡看到別人提供的解決辦法,試了一下,可以用。

<scroll-view :scroll-y="scroll" style="height:200px" scroll-with-animation="true">
.....
<-- 彈出層 -->
 <div class="layer">
  ....
 </div>

</scroll-view>

點選彈窗按鈕時,把 scroll 設定為 false。 點選關閉按鈕時,再把 scroll 設定為true 。同時設定body的樣式

body{
    overflow-y: hidden;
    height: 100%;
}

4.引入echarts 打包後文件過大

專案中需要引入echarts,直接引入後,打包完體積超過 2M了,沒辦法提交。echarts提供的有精簡版本,我們可以匯入精簡的版本。

import echarts from "echarts/dist/echarts.simple.min";
import mpvueEcharts from "mpvue-echarts";

具體的 echarts 使用,請看文件,有詳細的介紹。

5.頁面載入生命週期

當從一個頁面跳轉到另一個頁面時,我們在新頁面不能使用created來初始化獲取介面返回的內容。

因為小程式首次載入會把所以頁面的created都執行。

我們可以使用下面方法

 async onLoad() {
    ....
 }

結束語

如果之前使用過vue,那麼使用mpvue來開發小程式上手非常快,基本上可以無縫對接。

mpvue目前還是有坑的,不過後面迭代的版本功能會越來越完善。