小程序的初次遇见,使用mpvue搭建模板
由于公司业务需求的需要,在这一周需要开发小程序,加急看了下小程序的文档,发现用其原生来编写程序不是很顺手,公司前端用的技术栈是vue, 询问了谷哥和度娘发现大部分推荐了 wepy和 mpvue,对比了两个框架,还是选用了 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和原文地址
每个人都有第一次,哈哈~这就是我的第一次写文章,不到之处,望指正。
小程序的初次遇见,使用mpvue搭建模板的更多相关文章
- 微信小程序开发:学习笔记[2]——WXML模板
微信小程序开发:学习笔记[2]——WXML模板 快速开始 介绍 WXML 全称是 WeiXin Markup Language,是小程序框架设计的一套标签语言,结合小程序的基础组件.事件系统,可以构建 ...
- 微信小程序结合原生JS实现电商模板(二)
接 <微信小程序结合原生JS实现电商模板(一)>,在首页列表加入购物车到购物和模块增删数量,动态计算商品价格实现后,本次提交主要实现了商品详情(还不完善)简单页面,从商品详情页跳转到购物车 ...
- WTF小程序之原生遇见mpvue
事情是这样的,我们有一个原生(wxml,wxss,js,json)写的小程序,要加入一个新的模块,并且时间比较紧张.所以我们选择了采用mpvue开发一个分包(subpackage),加入到原生小程序中 ...
- 小程序第三方框架对比 ( wepy / mpvue / taro )(转)
文章转自 https://www.cnblogs.com/Smiled/p/9806781.html 众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程 ...
- 小程序第三方框架对比 ( wepy / mpvue / taro )
众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程序, 快应用等,每一端都是巨大的流量入口,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端 ...
- 微信小程序开发初次尝试-----实验应用制作(一)
初次尝试微信小程序开发,在此写下步骤以做记录和分享. 1.在网上找了很多资料,发现这位知乎大神提供的资料非常全面. 链接 https://www.zhihu.com/question/50907897 ...
- Vue+koa2开发一款全栈小程序(3.vue入门、Mpvue入门)
1.Vue-cli 1.新建一个vue项目 打开cmd 官方命令行工具 npm install -g vue-cli //安装脚手架 cd到你想要存放demo的目录下,然后 vue init webp ...
- 小程序开发总结一:mpvue框架及与小程序原生的混搭开发
mpvue-native:小程序原生和mpvue代码共存 问题描述 mpvue和wepy等框架是在小程序出来一段时间之后才开始有的,所以会出现的问题有:需要兼容已有的老项目,有些场景对小程序的兼容要求 ...
- 基于微信小程序云开发实现的婚礼邀请函模板,可自行定制开发
这个婚礼邀请函是之前帮别人做的,现在人家婚礼举办过了也没啥关系了,想着就修改成通用模板进行开源,方便大家尤其是小白们克隆项目之后稍微修改就能够直接使用. 当时自己开始这个项目时候也是查阅了很多教程文章 ...
随机推荐
- Python:List
1.List相关的操作符 操作符 说明 例子 * 重复,将List重复若干遍放到同一个List中 ['hi'] * 3 ['hi' , 'hi' , 'hi'] + 合并两个List(作用和appen ...
- Vue之获取DOM元素与更新DOM后事件的特殊情况
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 禁用所有控制台console.log()打印
在前端dev的环境下,经常会用到console.log()进行调试,以方便开发, 而在产品release的版本中,又不合适在浏览器的console中输出那么多的调试信息. 但是会经常因为没有删除这些开 ...
- LeetCode-036-有效的数独
有效的数独 题目描述:请你判断一个 9x9 的数独是否有效.只需要 根据以下规则 ,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 ...
- SQL Server--设置用IP地址登录
问题概述:新安装的SQL Server数据库无法用IP地址登录. 是因为 SQL Server "服务器网络实用工具"中禁用了"命名管道"所致! 在sqlse ...
- Python语法3
目录 模块 Python程序架构 第三方工具包: 创建packet包 模块导入方式 异常处理 六种典型异常 异常处理 自定义异常 模块 Python程序架构 Python源代码文件:*.py 一个py ...
- boxcox1p归一化+pipeline+StackingCVRegressor
找到最好的那个参数lmbda. from mlxtend.regressor import StackingCVRegressor from sklearn.datasets import load_ ...
- quartz框架(十)-QuartzShedulerThread
QuartzSchedulerThread 本篇博文,博主将介绍QuartzSchedulerThread的相关内容.话不多说,直接进入正题. 什么是QuartzSchedulerThread? 从源 ...
- OpenTracing 简介
自从 Google Dapper 的论文发布之后,各大互联网公司和开源社区开发的分布式链路追踪产品百花齐放,同时也给使用者带来了一个问题,各个分布式链路追踪产品的 API 并不兼容,如果用户在各个产品 ...
- Redis(一):基本数据类型与底层存储结构
最近在整理有关redis的相关知识,对于redis的基本数据类型以及其底层的存储结构简要的进行汇总和备注(主要为面试用) Redis对外提供的基本数据类型主要为五类,分别是 STRING:可以存储字符 ...