资讯专栏INFORMATION COLUMN

小程序的初次遇见,使用mpvue搭建模板

MangoGoing / 452人阅读

摘要:最后写一个公用的样式就可以使用了。现在我们可以愉快的使用其开发了,如果对开发比较熟悉的话,完全迁移过来是没有问题的。

由于公司业务需求的需要,在这一周需要开发小程序,加急看了下小程序的文档,发现用其原生来编写程序不是很顺手,公司前端用的技术栈是vue, 询问了谷哥和度娘发现大部分推荐了 wepympvue,对比了两个框架,还是选用了 mpvue, 因为 mpvue 继承自 vue.js,其技术规范和语法特点与 Vue.js 保持一致。

快速搭建 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.js

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中, 在组件里可以方便调用

import toast from "./utils/toast"
Vue.prototype.$totast = toast
2.封装 publicRequest

小程序的网路请求不是很方便,我们也对其封装一下。

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 上去。

import publicRequest from "./utils/publicRequest"
Vue.prototype.$http = publicRequest
3.扫一扫的调用

我们先公用出扫一扫

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,如

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和原文地址
每个人都有第一次,哈哈~这就是我的第一次写文章,不到之处,望指正。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94759.html

相关文章

  • 美团程序框架mpvue蹲坑指南

    摘要:这个是我们约定的额外的配置这个字段下的数据会被填充到顶部栏的统一配置美团汽车票同时,这个时候,我们会根据的页面数据,自动填充到中的字段。 美团小程序框架mpvue(花名:没朋友)蹲坑指南 第一次接触小程序大概是17年初,当时小程序刚刚内侧,当时就被各种限制折腾的死去活来的,单向绑定,没有promise,请求数限制,包大小限制,各种反人类,...反正我是感受到了满满的恶意.最近接到一个工...

    AprilJ 评论0 收藏0
  • mpvue+vant app搭建微信程序

    摘要:开发微信小程序使用全局安装创建一个基于模板的新项目安装依赖启动构建使用将下的下的目录复制到下的目录即可调用调用中调用中使用请输入搜索关键词搜索关注我的微信公众账号分享更多 mpvue+vant 开发微信小程序 mpvue使用 # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 mpvue-quickstart 模板的新项目 $...

    int64 评论0 收藏0
  • 程序项目入坑实践

    摘要:公司由于小程序原开发需求变动,产品决定重新开始设计新的小程序,人员紧张,导致我接了这个坑。输入数字一般项目可能都会碰到金额的输入限制,这里小程序组件,可利用,来控制输入只能是数值和小数点。 公司由于小程序原开发需求变动,产品决定重新开始设计新的小程序,人员紧张,导致我接了这个坑~。原开发时准备使用 mpvue 来开发,前篇文章介绍了一些关于mpvue的写法,后来在我将简易框架搭建后,发...

    zhjx922 评论0 收藏0
  • mpvue程序开发从零构建

    摘要:根据官方文档,用搭建脚手架。全局安装创建一个基于模板的新项目安装依赖启动构建生成的目录结构如图。示例图小知识点,标签模板既可以用里也可以用小程序里的,比如等,在轮播图中运用方便高效。 1、根据官方文档,用mpvue搭建脚手架。 # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 mpvue-quickstart 模板的新项目 $...

    zhiwei 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<