小程序的初次碰見,使用mpvue搭建模板

因爲公司業務需求的須要,在這一週須要開發小程序,加急看了下小程序的文檔,發現用其原生來編寫程序不是很順手,公司前端用的技術棧是vue, 詢問了谷哥和度娘發現大部分推薦了 wepympvue,對比了兩個框架,仍是選用了 mpvue, 由於 mpvue 繼承自 vue.js,其技術規範和語法特色與 Vue.js 保持一致。css

快速搭建 mpvue 目錄
// 全局安裝 vue-cli
$ npm install --global vue-cli
// 建立一個基於 mpvue-quickstart 模板的新項目
$ vue init mpvue/mpvue-quickstart wx-mpvue-demo
// 安裝依賴
$ cd wx-mpvue-demo
$ npm install
// 啓動構建
$ npm run dev

一個簡單的工程目錄就搭建完成了。前端

封裝本身的公用模塊
1.封裝Totast

因爲小程序原生的消息提示實在是讓人崩潰,因此咱們先本身來封裝下 totast, 在 util目錄新建 totast.jsvue

class toast {
  static msg (title, {icon = 1}) {
    wx.showToast({
      title,
      icon: ['success', 'none'][icon]
    })
  }
  static confirm ({title = '提示', content, callback}) {
    wx.showModal({
      title,
      content,
      success: function (res) {
        if (res.confirm) {
          callback(res.confirm)
        } else if (res.cancel) {
          console.log('用戶點擊取消')
        }
      }
    })
  }
}

export default toast

咱們掛載到main.js中, 在組件裏能夠方便調用git

import toast from './utils/toast'
Vue.prototype.$totast = toast
2.封裝 publicRequest

小程序的網路請求不是很方便,咱們也對其封裝一下。github

import totast from './toast'

const Authorization = 'Bearer xxx'
class publicRequest {
  static get ({url, data = {}, isJson = false, hasToken = true, header}) {
    let hasNetWork = checkNetWork()

    if (!hasNetWork) {
      totast.msg('網路異常', {})
      return false
    }

    let contentType = isJson ? 'application/json' : 'application/x-www-form-urlencoded'
    let _authorization = hasToken ? {'Authorization': Authorization} : {}
    let _header = Object.assign({'content-type': contentType}, _authorization, header)
    wx.showLoading({title: '加載中...'})
    return new Promise((resolve, reject) => {
      wx.request({
        url,
        header: _header,
        dataType: 'json',
        method: 'GET',
        data,
        success: (res) => {
          if (res.statusCode === 200) {
            resolve(res.data)
          }
        },
        fail: (error) => {
          totast.msg(error.errMsg, {})
          reject(error)
        },
        complete: res => {
          if (res.statusCode !== 200) {
            totastMessage({
              statusCode: res.statusCode,
              message: res.data.msg
            })
          }
          wx.hideLoading()
        }
      })
    })
  }
  static post ({url, data = {}, isJson = false, hasToken = true, header}) {
    let hasNetWork = checkNetWork()

    if (!hasNetWork) {
      totast.msg('網路異常', {})
      return false
    }
    let contentType = isJson ? 'application/json' : 'application/x-www-form-urlencoded'
    let _authorization = hasToken ? {'Authorization': Authorization} : {}
    let _header = Object.assign({'content-type': contentType}, _authorization, header)
    wx.showLoading({title: '加載中...'})
    return new Promise((resolve, reject) => {
      wx.request({
        url,
        header: _header,
        method: 'POST',
        data,
        dataType: 'json',
        success: (res) => {
          resolve(res.data)
        },
        fail: (error) => {
          totast.msg(error.errMsg, {})
          reject(error)
        },
        complete: res => {
          if (res.statusCode !== 200) {
            totastMessage({
              statusCode: res.statusCode,
              message: res.data.msg
            })
          }
          wx.hideLoading()
        }
      })
    })
  }
}
const checkNetWork = function () {
  return new Promise(resolve => {
    wx.getNetworkType({
      success: res => {
        let networkType = res.networkType;
        if (networkType === 'none' || networkType === 'unknown') {
          resolve(false)
        } else {
          resolve(true)
        }
      },
      fail: () => {
        resolve(false)
      }
    })
  })
}
const totastMessage = function ({statusCode, message}) {
  switch (statusCode) {
    case 502:
      totast.msg('服務器異常', {})
      break
    default:
      totast.msg(message, {})
      break
  }
}
export default publicRequest

咱們呢也對其掛載到 vue 上去。vue-cli

import publicRequest from './utils/publicRequest'
Vue.prototype.$http = publicRequest
3.掃一掃的調用

咱們先公用出掃一掃npm

const handleScan = function () {
  return new Promise((resolve, reject) => {
    wx.scanCode({
      success: (res) => {
        console.log(res)
        resolve(res)
      },
      fail: error => {
        reject(error)
      }
    })
  })
}
export default handleScan

公用出來後掛載到咱們的 vue 上後能夠在組件裏直接調用 this.$handleScan,如json

methods: {
  async scanCodeInfo () {
    let goods = await this.$handleScan()
    console.log(goods)
    this.codeInfo = goods.result
  }
}
4.如何引入iconfont圖標

由於小程序的wxss文件的font-face的url不接受http地址做爲參數,但能夠接受base64,所以需將字體文件下載後,轉換爲base64,而後引用。
因此咱們能夠在阿里巴巴圖標庫下載下來,將iconfont.ttf轉換。轉換地址:https://transfonter.org/ 小程序

圖片描述

下載文件後解壓獲得stylesheet.css文件,將此文件引入到項目。最後寫一個公用的樣式:服務器

.icon:after{
  font-family: 'iconfont';
  font-weight: lighter;
  font-style: normal;
}

.icon-saoyisao:after { content: "\e7c7"; }

.icon-hebingxingzhuang:after { content: "\e61a"; }

就可使用了。

如今咱們能夠愉快的使用其開發了,若是對 vue開發比較熟悉的話,徹底遷移過來是沒有問題的。最後附上項目demo原文地址每一個人都有第一次,哈哈~這就是個人第一次寫文章,不到之處,望指正。

相關文章
相關標籤/搜索