前言

16年小程序刚出来的时候,就准备花点时间去学学。无奈现实中手上项目太多,一个接着一个,而且也没有开发小程序的需求,所以就一拖再拖。

直到上周,终于有一个小程序的项目。如果现在学小程序,时间上肯定来不及了(就给了一周的时间)。正好前段时间看到美团开源了一个使用vue来开发微信小程序的框架 mpvue。因为平时vue用的多,所以就决定使用 mpvue 来开发。

mpvue 介绍

我们看一下mpvue官网上的介绍:

mpvue 是一个使用 Vue.js 开发小程序的前端框架。框架基于 Vue.js 核心,mpvue 修改了 Vue.js 的 runtimecompiler 实现,使其可以运行在小程序环境中,从而为小程序开发引入了整套 Vue.js 开发体验。

mpvue 优势

  1. 彻底的组件化开发能力:提高代码复用性
  2. 完整的 Vue.js 开发体验
  3. 方便的 Vuex 数据管理方案:方便构建复杂应用
  4. 快捷的 webpack 构建机制:自定义构建策略、开发阶段 hotReload
  5. 支持使用 npm 外部依赖
  6. 使用 Vue.js 命令行工具 vue-cli 快速初始化项目
  7. H5 代码转换编译成小程序目标代码的能力

开发过程

通过 Vue.js 命令行工具 vue-cli,你只需在终端窗口输入几条简单命令,即可快速创建和启动一个带热重载、保存时静态检查、内置代码构建功能的小程序项目:

# 创建一个基于 mpvue-quickstart 模板的新项目
$ vue init mpvue/mpvue-quickstart my-project # 安装依赖
$ cd my-project
$ npm install
# 启动构建
$ npm run dev

接下来,你只需要启动微信开发者工具,引入项目即可预览到你的第一个 mpvue 小程序。

下面是一个项目目录结构。

和开发vue完全一样,不过需要注意的是,小程序不支持dom操作,所以vue中的 ref 也不能使用。

其它基础可以看mpvue官网,上面有详细的使用说明。下面主要说一个在开发过程中遇到的坑。

mpvue开发中遇到的问题

1.路由跳转

vue中 使用 vue-router 来进行路由跳转的。mpvue中只需要用 a 标签就行了。

<a href="/page/counter/main?text=123">

同时也可以使用小程序自身提供的api完成页面跳转

 wx.navigateTo({
url: `/pages/counter/main?text=${this.text}`
});

2.input框光标位置

在input输入框内输入内容时,当我想修改前面已经输入好的文字,把光标移动到需要修改的位置。

修改完之后,光标自动跑到最后了,这样给用户体验不好。

  <input type="text" v-model="text">

可以使用 v-model.lazy 但是 lazy 在输入框失去焦点时才能触发。可以使用setTimeout来延迟执行。

  <input type="text" v-model.lazy="text">

  setTimeout(() => {
...
let ipt = this.text;
...
},100)

这样就能解决了。

3.弹出层滚动穿透

写了一个简单的弹窗,发现滚动弹出层里的内容,后面的内容也跟着滚动。开始以为阻止冒泡就行了。结果试了一下,还是不行。在 issues 里看到别人提供的解决办法,试了一下,可以用。

<scroll-view :scroll-y="scroll" style="height:200px" scroll-with-animation="true">
.....
<-- 弹出层 -->
<div class="layer">
....
</div> </scroll-view>

点击弹窗按钮时,把 scroll 设置为 false。 点击关闭按钮时,再把 scroll 设置为true 。同时设置body的样式

body{
overflow-y: hidden;
height: 100%;
}

4.引入echarts 打包后文件过大

项目中需要引入echarts,直接引入后,打包完体积超过 2M了,没办法提交。echarts提供的有精简版本,我们可以导入精简的版本。

import echarts from "echarts/dist/echarts.simple.min";
import mpvueEcharts from "mpvue-echarts";

具体的 echarts 使用,请看文档,有详细的介绍。

5.页面加载生命周期

当从一个页面跳转到另一个页面时,我们在新页面不能使用created来初始化获取接口返回的内容。

因为小程序首次加载会把所以页面的created都执行。

我们可以使用下面方法

 async onLoad() {
....
}

结束语

如果之前使用过vue,那么使用mpvue来开发小程序上手非常快,基本上可以无缝对接。

mpvue目前还是有坑的,不过后面迭代的版本功能会越来越完善。

使用mpvue开发微信小程序的更多相关文章

  1. mpvue开发微信小程序,分享按钮报错:`Cannot read property 'apply' of null`

    用mpvue开发微信小程序,分享按钮报错:Cannot read property 'apply' of null onShareAppMessage 是于微信小程序Pages的生命周期钩子,顾这个方 ...

  2. 利用mpvue开发微信小程序

    最近公司部门负责人提出需求需要开发一款微信小程序,由于本人之前是做前端开发的,对于小程序开发一窍不通,但是很多时候我们都是把不会做变成我会学.于是便在网上寻找小程序开发教程,相比于相生的小程序开发,本 ...

  3. mpvue开发微信小程序

    前段时间,美团开源了mpvue这个项目,使得我们又多了一种用来开发小程序的框架选项.由于mpvue框架是完全基于Vue框架的(重写了其runtime和compiler),因此在用法上面是高度和Vue一 ...

  4. mpvue开发微信小程序之时间+日期选择器

    最近在做微信小程序,技术栈为mpvue+iview weapp组件库. 因项目需求,要用到日期+时间选择器,iview组件库目前还未提供时间日期选择器的组件,小程序官方组件日期时间也是分开的,在简书上 ...

  5. mpvue 开发微信小程序搭建项目

    首先 mpvue 是一款基于vue的框架,mpvue 修改了 Vue.js 的 runtime 和 compile 实现,可以运行在小程序的环境中. 第一步:安装 vue-cli vue-cli是vu ...

  6. mpvue开发微信小程序之picker

    微信使用picker组件,bingchange 换成@change即可使用监听函数和方法 此处注意与微信多了一个mp的信息才能获取到选中的值. 获取当前日期+时间 function formatTim ...

  7. mpvue 应用 Vant Weapp框架开发微信小程序

    今天在使用mpvue开发微信小程序的过程中需要实现一个底部上拉选择列表的功能,因为之前做过H5微信公众号的开发,使用的就是有赞的Vant-ui,所以第一时间就想到了有赞的Vant Weapp UI框架 ...

  8. 用Vue.js开发微信小程序:开源框架mpvue解析

    前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...

  9. mpvue体验微信小程序开发

    微信小程序 https://developers.weixin.qq.com/miniprogram/introduction/index.html?t=18082114 微信小程序是一种全新的连接用 ...

随机推荐

  1. [mysql5.6] 主从更换ip之后重新建立同步

    情况时这样的: 主从系统 centos6.5 mysql5.6 由于机房迁移ip地址变了,导致原来的主动无法同步,于是需要重新建立主从关系. 主 192.168.1.23 从 192.168.1.22 ...

  2. UNIX环境高级编程——互斥量属性

    互斥量具有一些属性,通过修改这些属性可以控制锁的一些行为.缺省的互斥锁属性及其值如下: pshared:         PTHREAD_PROCESS_PRIVATE type:           ...

  3. iOS积分抽奖Demo,可以人为控制不同奖项的得奖率

    最近公司让写一个转盘积分抽奖的样式,所以把创建过程中的心得记录一下,给大家分享 首先创建了相关的图片转盘,指针图片,然后就是考虑转盘如何旋转的问题,我是通过给指针图片添加一个动画效果,从而实现旋转效果 ...

  4. android下在屏幕适配小总结

    为什么要屏幕适配?为此我就不说了,网上处理方法要么让你用几套不同分辨率的图片,要么写几套布局文件,要么就是在xml中写dip(这个还是可以的),前面两种感觉过程工作量太大了,由加载大图片的优化思想 同 ...

  5. ROS_Kinetic_13 ROS数据录制与回放

    ROS_Kinetic_13 ROS数据录制与回放 官网教程:http://wiki.ros.org/cn/ROS/Tutorials/Recording%20and%20playing%20back ...

  6. UNIX环境高级编程——Linux系统调用列表

    以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数.这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完 ...

  7. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  8. Linux Shell 命令--rename

    重命名文件,经常用到mv命令,批量重命名文件rename是最好的选择,Linux的rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,判断方法:输入man rename 看到第 ...

  9. 【Android 应用开发】 Ubuntu 安装 Android Studio (旧版本|仅作参考)

    . 果断换Ubuntu了, Ubuntu的截图效果不好, 不能设置阴影 ... 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article ...

  10. SpriteBuilder中关节的Breaking force属性

    在SpriteBuilder中三种物理关节都包含Breaking force区域在属性框中. 该属性被设置成关节可以承受的压力临界值.如果关节的压力超出了Breaking force中设置的值,则关节 ...