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

快速搭建 mpvue 目录

  1. // 全局安装 vue-cli
  2. $ npm install --global vue-cli
  3. // 创建一个基于 mpvue-quickstart 模板的新项目
  4. $ vue init mpvue/mpvue-quickstart wx-mpvue-demo
  5. // 安装依赖
  6. $ cd wx-mpvue-demo
  7. $ npm install
  8. // 启动构建
  9. $ npm run dev

一个简单的工程目录就搭建完成了。

封装自己的公用模块

1.封装Totast

由于小程序原生的消息提示实在是让人崩溃,所以我们先自己来封装下 totast, 在 util目录新建 totast.js

  1. class toast {
  2. static msg (title, {icon = 1}) {
  3. wx.showToast({
  4. title,
  5. icon: ['success', 'none'][icon]
  6. })
  7. }
  8. static confirm ({title = '提示', content, callback}) {
  9. wx.showModal({
  10. title,
  11. content,
  12. success: function (res) {
  13. if (res.confirm) {
  14. callback(res.confirm)
  15. } else if (res.cancel) {
  16. console.log('用户点击取消')
  17. }
  18. }
  19. })
  20. }
  21. }
  22. export default toast

我们挂载到main.js中, 在组件里可以方便调用

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

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

  1. import totast from './toast'
  2. const Authorization = 'Bearer xxx'
  3. class publicRequest {
  4. static get ({url, data = {}, isJson = false, hasToken = true, header}) {
  5. let hasNetWork = checkNetWork()
  6. if (!hasNetWork) {
  7. totast.msg('网路异常', {})
  8. return false
  9. }
  10. let contentType = isJson ? 'application/json' : 'application/x-www-form-urlencoded'
  11. let _authorization = hasToken ? {'Authorization': Authorization} : {}
  12. let _header = Object.assign({'content-type': contentType}, _authorization, header)
  13. wx.showLoading({title: '加载中...'})
  14. return new Promise((resolve, reject) => {
  15. wx.request({
  16. url,
  17. header: _header,
  18. dataType: 'json',
  19. method: 'GET',
  20. data,
  21. success: (res) => {
  22. if (res.statusCode === 200) {
  23. resolve(res.data)
  24. }
  25. },
  26. fail: (error) => {
  27. totast.msg(error.errMsg, {})
  28. reject(error)
  29. },
  30. complete: res => {
  31. if (res.statusCode !== 200) {
  32. totastMessage({
  33. statusCode: res.statusCode,
  34. message: res.data.msg
  35. })
  36. }
  37. wx.hideLoading()
  38. }
  39. })
  40. })
  41. }
  42. static post ({url, data = {}, isJson = false, hasToken = true, header}) {
  43. let hasNetWork = checkNetWork()
  44. if (!hasNetWork) {
  45. totast.msg('网路异常', {})
  46. return false
  47. }
  48. let contentType = isJson ? 'application/json' : 'application/x-www-form-urlencoded'
  49. let _authorization = hasToken ? {'Authorization': Authorization} : {}
  50. let _header = Object.assign({'content-type': contentType}, _authorization, header)
  51. wx.showLoading({title: '加载中...'})
  52. return new Promise((resolve, reject) => {
  53. wx.request({
  54. url,
  55. header: _header,
  56. method: 'POST',
  57. data,
  58. dataType: 'json',
  59. success: (res) => {
  60. resolve(res.data)
  61. },
  62. fail: (error) => {
  63. totast.msg(error.errMsg, {})
  64. reject(error)
  65. },
  66. complete: res => {
  67. if (res.statusCode !== 200) {
  68. totastMessage({
  69. statusCode: res.statusCode,
  70. message: res.data.msg
  71. })
  72. }
  73. wx.hideLoading()
  74. }
  75. })
  76. })
  77. }
  78. }
  79. const checkNetWork = function () {
  80. return new Promise(resolve => {
  81. wx.getNetworkType({
  82. success: res => {
  83. let networkType = res.networkType;
  84. if (networkType === 'none' || networkType === 'unknown') {
  85. resolve(false)
  86. } else {
  87. resolve(true)
  88. }
  89. },
  90. fail: () => {
  91. resolve(false)
  92. }
  93. })
  94. })
  95. }
  96. const totastMessage = function ({statusCode, message}) {
  97. switch (statusCode) {
  98. case 502:
  99. totast.msg('服务器异常', {})
  100. break
  101. default:
  102. totast.msg(message, {})
  103. break
  104. }
  105. }
  106. export default publicRequest

我们呢也对其挂载到 vue 上去。

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

我们先公用出扫一扫

  1. const handleScan = function () {
  2. return new Promise((resolve, reject) => {
  3. wx.scanCode({
  4. success: (res) => {
  5. console.log(res)
  6. resolve(res)
  7. },
  8. fail: error => {
  9. reject(error)
  10. }
  11. })
  12. })
  13. }
  14. export default handleScan

公用出来后挂载到我们的 vue 上后可以在组件里直接调用 this.$handleScan,如

  1. methods: {
  2. async scanCodeInfo () {
  3. let goods = await this.$handleScan()
  4. console.log(goods)
  5. this.codeInfo = goods.result
  6. }
  7. }
4.如何引入iconfont图标

因为小程序的wxss文件的font-face的url不接受http地址作为参数,但可以接受base64,因此需将字体文件下载后,转换为base64,然后引用。
所以我们可以在阿里巴巴图标库下载下来,将iconfont.ttf转换。转换地址:https://transfonter.org/

下载文件后解压得到stylesheet.css文件,将此文件引入到项目。最后写一个公用的样式:

  1. .icon:after{
  2. font-family: 'iconfont';
  3. font-weight: lighter;
  4. font-style: normal;
  5. }
  6. .icon-saoyisao:after { content: "\e7c7"; }
  7. .icon-hebingxingzhuang:after { content: "\e61a"; }

就可以使用了。

现在我们可以愉快的使用其开发了,如果对 vue开发比较熟悉的话,完全迁移过来是没有问题的。最后附上项目demo原文地址
每个人都有第一次,哈哈~这就是我的第一次写文章,不到之处,望指正。

小程序的初次遇见,使用mpvue搭建模板的更多相关文章

  1. 微信小程序开发:学习笔记[2]——WXML模板

    微信小程序开发:学习笔记[2]——WXML模板 快速开始 介绍 WXML 全称是 WeiXin Markup Language,是小程序框架设计的一套标签语言,结合小程序的基础组件.事件系统,可以构建 ...

  2. 微信小程序结合原生JS实现电商模板(二)

    接 <微信小程序结合原生JS实现电商模板(一)>,在首页列表加入购物车到购物和模块增删数量,动态计算商品价格实现后,本次提交主要实现了商品详情(还不完善)简单页面,从商品详情页跳转到购物车 ...

  3. WTF小程序之原生遇见mpvue

    事情是这样的,我们有一个原生(wxml,wxss,js,json)写的小程序,要加入一个新的模块,并且时间比较紧张.所以我们选择了采用mpvue开发一个分包(subpackage),加入到原生小程序中 ...

  4. 小程序第三方框架对比 ( wepy / mpvue / taro )(转)

    文章转自  https://www.cnblogs.com/Smiled/p/9806781.html 众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程 ...

  5. 小程序第三方框架对比 ( wepy / mpvue / taro )

      众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程序, 快应用等,每一端都是巨大的流量入口,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端 ...

  6. 微信小程序开发初次尝试-----实验应用制作(一)

    初次尝试微信小程序开发,在此写下步骤以做记录和分享. 1.在网上找了很多资料,发现这位知乎大神提供的资料非常全面. 链接 https://www.zhihu.com/question/50907897 ...

  7. Vue+koa2开发一款全栈小程序(3.vue入门、Mpvue入门)

    1.Vue-cli 1.新建一个vue项目 打开cmd 官方命令行工具 npm install -g vue-cli //安装脚手架 cd到你想要存放demo的目录下,然后 vue init webp ...

  8. 小程序开发总结一:mpvue框架及与小程序原生的混搭开发

    mpvue-native:小程序原生和mpvue代码共存 问题描述 mpvue和wepy等框架是在小程序出来一段时间之后才开始有的,所以会出现的问题有:需要兼容已有的老项目,有些场景对小程序的兼容要求 ...

  9. 基于微信小程序云开发实现的婚礼邀请函模板,可自行定制开发

    这个婚礼邀请函是之前帮别人做的,现在人家婚礼举办过了也没啥关系了,想着就修改成通用模板进行开源,方便大家尤其是小白们克隆项目之后稍微修改就能够直接使用. 当时自己开始这个项目时候也是查阅了很多教程文章 ...

随机推荐

  1. jieba:统计一篇文章中词语数

    jieba官方文档 1.jieba分词的四种模式 精确模式.全模式.搜索引擎模式.paddle模式 精确模式:把文本精确的切分开,不存在冗余单词,适合文本分析: 全模式:把文本中所有可能的词语都扫描出 ...

  2. c# Winform中如何把图片添加到resources中

    我们在Winform项目中中需要插入图片资源,但是新建的项目中找不到Resources文件夹,怎么才能出现呢? 1:双击项目下的Resources.resx,出现视图 2:单击"添加资源&q ...

  3. GPG入门尝试

    GPG入门尝试 参考:阮一峰的网络日志 在所附链接中,对大多数信息的解释说明已经较为详细,在此只补充实际操作中的一些问题和解决方法 gpg --decrypt demo.en.txt --output ...

  4. 矩池云 | 教你如何使用GAN为口袋妖怪上色

    在之前的Demo中,我们使用了条件GAN来生成了手写数字图像.那么除了生成数字图像以外我们还能用神经网络来干些什么呢? 在本案例中,我们用神经网络来给口袋妖怪的线框图上色. 第一步: 导入使用库 fr ...

  5. 阿里云CND加速

    1: :2: 3: 4: 5: 6: 7:将解析信息如实添加 8:如果报错添加 CNAME 记录提示和 A 记录冲突,也就是说如果你要添加 CDN 全站加速,域名解析那里就不能再有 A 记录了, 只有 ...

  6. tp5 Redis缓冲的设置与清除

    控制器代码: //设置缓冲的方法 public function order() { $word = input('word');//接受搜索值 //题意:将订单数据使用redis进行缓存中,第二次读 ...

  7. 一比一还原axios源码(零)—— 概要

    从vue2版本开始,vue-resource就不再被vue所维护和支持,官方也推荐使用axios,所以,从我使用axios至今,差不多有四五年了,这四五年的时间只能算是熟练应用,很多内部的实现和原理不 ...

  8. Vue的mvvm模式

    传统的MVC模式: Model:模型-->负责数据存储 View:视图-->负责页面展示 Control:控制器-->事件交互(根据视图与用户交互后改变数据) Vue的MVVM模式: ...

  9. LGP4609题解

    题意简单明确( 很容易知道最高的位置一定是左边能看到最高的和右边能看到最高的.于是我们考虑一个 dp: 设 \(dp[n][A][B]\) 表示长度为 \(n\) 的排列,左边有 \(A\) 个 ba ...

  10. ElasticSearch7.3 学习之Mapping核心数据类型及dynamic mapping

    1.mapping的核心数据类型以及dynamic mapping 1.1 核心的数据类型 string :text and keyword,byte,short,integer,long,float ...