demo github地址: https://github.com/zkl904/mpvueFX.git
注意:这里用的小程序平台的网址用的是我个人的账号链接, 所以登录的时候会要求重新登录, 使用自己的账号即可
1: 小程序账号的注册
小程序文档地址: https://mp.weixin.qq.com/debug/wxadoc/dev/index.html
小程序平台登陆: https://mp.weixin.qq.com/
小程序开发者工具下载; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
获取appid 以及 appsecret: https://mp.weixin.qq.com/wxopen/devprofile?action=get_profile&token=674021264&lang=zh_CN
1.1步骤:
1. 先申请一个小程序账号
3个 步骤: 账号信息 => 邮箱激活 => 信息登陆
1.png
这三个步骤填写完成后 进入小程序平台,
1. 填好小程序信息
image.png
2. 添加相应的开发者
image.png
2. 下载好开发者工具
小程序开发者工具下载; https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
3. 使用mpvue 进行小程序的开发
vue官网: https://cn.vuejs.org/
mpvue官网: http://mpvue.com/
mpvue项目合集: https://github.com/Meituan-Dianping/mpvue/issues/21
mpvue中出现的一些问题以及相应的解决方法: https://github.com/Meituan-Dianping/mpvue/issues
mpvue组件工具合集: https://github.com/mpvue/awesome-mpvue
注: 使用mpvue 需要一定的vue基础 , 开始使用之前最好先熟悉一些vue相关的一些语法
原生开发小程序 和 wepy 、 mpvue 对比
image.png
整体来说, 使用mpvue来开发小程序学习成本是最低的
3.1 开始搭建mpvue项目
(1): 若是之前没有安装过vue-cli , 先安装vue-cli
(2): 开始创建mpvue 项目
$ npm install -g vue-cli // 全局安装vue-cli
$ vue init mpvue/mpvue-quickstart my-project // 快速生成项目模版
image.png
其中appid查看 :
image.png
这样就建好了一个项目快速启动模板
(3): 安装相应的插件
(4): 编译一下文件 , 生成一个dist 文件, 小程序使用的代码就是这里的dist代码
$ npm install // 安装相应的插件
$ npm run dev // 编译生成一个dist文件
注: 项目拉下来之后记得先编译一下 , 生成dist 文件
image.png
关于微信开发者工具的使用: https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html
3.2 上传代码功能
上传完代码之后可以在 https://mp.weixin.qq.com/wxopen/wacodepage?action=getcodepage&token=194289795&lang=zh_CN 中看到
image.png
image.png
注: 这里的开发版本 只会有一个 , 之前有的 会被后上的给顶掉
3.3 编写一个简单的小程序页面
首先是页面的结构 :
image.png
注: 一个页面上有三个配置 , 分别是 xx.json xx.vue main.js 其中xx.json 是页面配置文件 , xx.vue 是页面的主代码 , main.js 是页面的入口文件 ,三个文件组成一个完整的页面 , 而且每次新增一个页面都必须要重新 npm run dev 一下重新编译dist文件 , 十分的不方便, 后面使用mpvue-entry 和 mpvue-router-patch来整合和简洁化页面
3.3.1 安装stylus 和 stylus-loader
可以使用stylus 来编写css
stylus文档: https://www.zhangxinxu.com/jq/stylus/
$ npm install stylus --save-dev
$ npm install stylus-loader --save-dev
验证下是否可以使用stylus , 在style标签中添加 lang="stylus" rel="stylesheet/stylus"
image.png
3.3.2安装mpvue-entry 和 mpvue-router-path
mpvue-entry文档 : https://www.npmjs.com/package/mpvue-entry?activeTab=readme
mpvue-rotuer-patch 文档: http://npm.taobao.org/package/mpvue-router-patch
$ npm install mpvue-entry -D
$ npm install mpvue-router-patch -D
3.3.2.1: mpvue-entry 相关配置
(1): 在src 文件夹下面 建一个router 文件夹 , 在新建一个index.js 文件 , 做为路由页面的编写
image.png
(2): 在webpack.base.conf.js 中进行相应的配置
image.png
注: 在mpvue-loader 1.10 版本后 , 注意 需要 删去plugins中的一段
/*webpack.base.conf.js 页面*/
const MpvueEntry = require('mpvue-entry')
....
const entry = MpvueEntry.getEntry({
pages: 'src/router/index.js',
main: 'src/main.js'
})
module.exports = {
entry,
...
plugins: [
new MpvuePlugin(),
new MpvueEntry(),
/*new CopyWebpackPlugin([{ // 这段需要注释掉, 不然会报错
from: '**!/!*.json',
to: ''
}], {
context: 'src/'
}),*/
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: path.resolve(__dirname, '../dist/static'),
ignore: ['.*']
}
])
]
}
/* router/index 页面的配置 */
// 重新配置一下页面 支持新增页面热更新
module.exports = [
{
path: 'pages/index/index',
config: {
navigationBarTitleText: '首页',
}
},
{
path: 'pages/counter/index',
config: {
navigationBarTitleText: 'counter页面',
}
}
]
3.3.2.2: mpvue-router-patch 相关配置
// src下面的main.js
import Vue from 'vue'
import MpvueRouterPatch from 'mpvue-router-patch'
Vue.use(MpvueRouterPatch)
安装完后检测下是否可以使用 router语法:
新建一个home页面
<template>
<div>
....
<div @click="goHome">点我去home页面</div>
</div>
</template>
<script>
export default {
data() {
},
methods: {
goHome() {
this.$router.push('/pages/home/index')
}
}
}
</script>
4. mpvue 的一些坑点
(1) : mpvue项目中所有页面的 created 函数都会在最开始就执行 , 即使这个页面没有运行 解决方法; 使用小程序的 onLoad 函数 或者 onShow函数 代替 (要让tabar页面进入就调用一次接口就用onShow)
image.png
image.png
(2): 本地图片处理方法, 在小程序中要是使用background的话, 必须得是远程图片 , 本地图片也是可以的, 但是得小于8k , 因为 mpvue会把它编译成base64格式的 , 不能被编译成base64的图片一律放在static中 , img需要的 图片要是放在本地的话 , 要放在static中 ,而不要放在相邻的images文件夹中 (最好把图片都放在服务器上面 , 小程序编译大小得小于2m)
image.png
image.png
(3): class 与 style 要是使用computed绑定的话 , 是不能 return 一个 object对象的 (这样的写法在vue中是很常用的, 当时mpvue中不行, 而且不会报错,很坑 , 但是页面上不会有效果)
image.png
image.png
(4): 小程序中不支持dom操作 , 因为小程序没有dom , 因此vue中的 ref 不能用
image.png
(5): mpvue中 不能随意的调用method中的方法 , 除了@click, @input 这种 , 其余的情况在template中是不能调用函数方法的 , 这个很坑, 只能调用computed计算属性代替 ,但是computed不能传递参数 , 那些实在需要参 数的可以使用组件来代替
image.png
image.png
(6): 小程序中不能使用过滤器 , 解决方法 ; (1) : 使用computed 代替 , 平时是还可以 , 但是在v-for得传递一个item参数, 就不能使用这个方法了 (2) : 编写一个filter组件 , 使用props 来传递参数
详情见代码文件
(7): 写在template中的行内样式中的px是不会转化为rpx的 , 因此行内样式直接用rpx 就可以了(也就是style里面的样式) css中的样式都会转化为rpx 格式 (px2rpx-loader插件)
image.png
这里的换算关系: rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应 ,在小程序中规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px, iPhone5为320px , iPhone6s: 414px
设备 rpx换算px (屏幕宽度/750) px换算rpx (750/屏幕宽度)
iPhone5 1rpx = (320/750) = 0.42px 1px =(750/320) = 2.34px
iPhone6 1rpx =(375/750) = 0.5px 1px =(750/375) = 2rpx
iPhone6s 1rpx =(414/750) = 0.552px 1px =(750/414) = 1.81rpx
image.png
image.png
(8): 在mpvue的css中使用*选择所有的元素是不起效果的 (不会报错,但是无效 , 并不会进行变色)
image.png
image.png
(9): 在小程序中使用animate动画, 可以使用微信的animation动画api , 但是微信的animation不提供循环功能 , 可以使用css3的动画 , 注: 使用@keyframes 的时候要加上前缀 , 不然编译的时候stylus会把前缀都写上, 其 中的-moz-, -o- 这两个就会引起报错 , 因此可以直接加上前缀 @ -webkit-keyframes
直接使用@keyframes报错 具体暂时看代码
image.png
image.png

1.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png






网友评论