mpvue将vue项目转换为小程序

news/2024/7/10 0:17:35 标签: vue, 小程序

一、 mpvue简介

mpvue:是由 美团点评团队出品的小程序开 发的一款基于 vue的框架, 从整个 Vue的核心代码上经过二次开发而形成的一个框架,相当于是给Vue本身赋能,增加了开发微信小程序的能力。

使用 mpvue开发小程序,你将在小程序技术体系的基础上获取到这样一些能力:

l 彻底的组件化开发能力:提高代码

l 完整的 Vue.js 开发体验

l 方便的 Vuex 数据管理方案:方便构建复杂应用

l 快捷的 webpack 构建机制:自定义构建策略、开发阶段 hotReload

l 支持使用 npm 外部依赖

l 使用 Vue.js 命令行工具 vue-cli 快速初始化项目

l H5 代码转换编译成小程序目标代码的能力

它的目标是:在未来最理想的状态下,可以一套代码可以直接跑在多端: WEB、微信小程序、支付宝小程序、Native(借助weex)。不过由于各个端之间都存在一些比较明显的差异性,从产品的层面上讲,不建议这么做,这个框架的官方他们对它的期望的也只是开发和调试体验的一致

原生微信小程序、 mpvue、WePY这三种开发小程序方式的比较

二、mpvue开发流程

1、小程序账号配置

1)前往https://mp.weixin.qq.com/wxopen/waregister?action=step1根据指引填写信息和提交相应的资料,申请小程序帐号。在菜单 “设置”-“开发设置”获取小程序的 AppID 。

2)在菜单 “设置”-“开发设置”中配置服务器域名,必须是https开头的域名

2、安装开发工具

前往 开发者工具下载页面 ,根据自己的操作系统下载对应的安装包进行安装,有关开发者工具更详细的介绍可以查看 《开发者工具介绍》 。

打开小程序开发者工具,用微信扫码登录开发者工具,准备开发小程序

3、mpvue生成项目

# 全局安装 vue-cli

$ npm install --global vue-cli

# 创建一个基于 mpvue-quickstart 模板的新项目

$ vue init mpvue/mpvue-quickstart my-project

# 安装依赖

$ cd my-project

$ npm install

# 启动构建

$ npm run dev

Npm run dev运行成功后,本地目录下会生成一个dist文件,这个文件就是生成的小程序相关代码。

小程序中新建项目,填写上一步获取的 appid,便于后面可以在手机上预览,真机测试,小程序的文件目录就是本地项目目录的dist文件。

三、mpvue开发中的规范

1、生命周期函数

除了 vue本身的生命周期外,mpvue还兼容了小程序的生命周期,

app 部分:

onLaunch,初始化

onShow,当小程序启动,或从后台进入前台显示

onHide,当小程序从前台进入后台

page 部分:

onLoad,监听页面加载

onShow,监听页面显示

onReady,监听页面初次渲染完成

onHide,监听页面隐藏

onUnload,监听页面卸载

onPullDownRefresh,监听用户下拉动作

onReachBottom,页面上拉触底事件的处理函数

onShareAppMessage,用户点击右上角分享

onPageScroll,页面滚动

onTabItemTap, 当前是 tab 页时,点击 tab 时触发 (mpvue 0.0.16 支持)

注意点 :

created:这个钩子是有bug的,所有页面的created函数会在项目加载的时候被一起调用,而且进入页面的时候不会在被调用,所以这个函数基本就不能使用了,用小程序的onLoad钩子代替

mounted:你如果从页面B返回页面A,页面A的mounted钩子不会被触发,因为页面没有被重新加载,如果有需要每次页面展示都要调用的逻辑,使用小程序的onShow代替

2、mpvue转换的部分规则

  1. 微信小程序的页面的 query 参数是通过 onLoad 获取的,mpvue 对此进行了优化,直接通过 this.$root.$mp.query 获取相应的参数数据

  2. 小程序里所有的 BOM/DOM 都不能用,因此v-html 、 v-text 不能用。

el:this.$refs...styles.width=offsetWIdth --> :style="{'width':offsetWidth}"

获取节点信息,

wx.createSelectorQuery().select(className).boundingClientRect().exec(res=>{
在此处获取到节点的信息: left,top,width,height})
  1. 不支持部分复杂的 JavaScript 渲染表达式,我们会把 template 中的 {{}} 双花括号的部分,直接编码到 wxml 文件中,由于微信小程序的能力限制(数据绑定),所以无法支持复杂的 JavaScript 表达式。

目前可以使用的有 + - * % ?: ! == === > < [] .,剩下的还待完善。

{{ message.split('').reverse().join('') }}

4) 不支持过滤器,渲染部分会转成 wxml ,wxml 不支持过滤器,所以这部分功能不支持。

5) 不支持在 template 内使用 methods 中的函数。

6) 不支持 官方文档: Class 与 Style 绑定 中的 classObject 和 styleObject 语法。

<template>
<!-- 支持 -->
<div class="container" :class="computedClassStr"></div>
<div class="container" :class="{active: isActive}"></div>
<!-- 不支持 -->
<div class="container" :class="computedClassObject"></div>
</template>
<script>
export default {
data () {
return {
isActive: true
}
},
computed: {
computedClassStr () {
return this.isActive ? 'active' : ''
},
computedClassObject () {
return { active: this.isActive }
}
}
}
</script>

7) 不支持在组件上使用 Class 与 Style 绑定,将class与style绑定在组件最外层div上

8) 列表渲染 需要注意一点, 嵌套列表渲染,必须指定不同的索引!

<template>
<ul v-for="(card, index) in list">
<li v-for="(item, itemIndex) in card">
{{item.value}}
</li>
</ul>
</template>
  1. 小程序不支持路由,因此,路由跳转使用小程序的页面导航 api代替
this.$router.push-->wx.navigateTo() //进入子页面
this.$router.replace-->wx.reLaunch()//打开新页面

10) 获取当前页面地址

this.$route.fullPath–>getCurrentPages()[0].route

11) 接口返回参数结构调整,小程序的 request请求接口返回的数据会在外层添加一个data

res:{
res:{ data:{
code:'000000', --> code:'000000',
data:{...} data:{...}
}   }
}

12) 不支持本地图片用作背景图,可以使用网络图片、或者 base64,或者使用img、image标签

13) 上拉加载 /下拉刷新,选用小程序的全局api,scroll-view中无法使用

14) 不支持 css媒体查询,css样式避免标签选择器,不易于维护

15) mpvue-wxParse富文本解析

1)安装npm i mpvue-wxparse

2)组件内

<template>
<wxParse :content="article" />
</template>
<script>
import wxParse from 'mpvue-wxparse'
components: {wxParse},
</script>
<style>
@import url("~mpvue-wxparse/src/wxParse.css");
</style>

最后

为了帮助大家让学习变得轻松、高效,给大家免费分享一大批资料,帮助大家在成为全栈工程师,乃至架构师的路上披荆斩棘。在这里给大家推荐一个前端全栈学习交流圈:866109386.欢迎大家进群交流讨论,学习交流,共同进步。

当真正开始学习的时候难免不知道从哪入手,导致效率低下影响继续学习的信心。

但最重要的是不知道哪些技术需要重点掌握,学习时频繁踩坑,最终浪费大量时间,所以有有效资源还是很有必要的。

最后祝福所有遇到瓶疾且不知道怎么办的前端程序员们,祝福大家在往后的工作与面试中一切顺利。


http://www.niftyadmin.cn/n/1300836.html

相关文章

vue、react等单页面项目部署到服务器的方法及vue和react的区别

tml页面空白&#xff0c;刷新当前路由404。。。用react做的项目也同样遇到类似问题。现在我们一起讨论下单页面如何部署到服务器&#xff1f; 由于前端路由缘故&#xff0c;单页面应用应该放到nginx或者apache、tomcat等web代理服务器中&#xff0c;千万不要直接访问index.htm…

vue服务端渲染添加缓存的方法

什么是服务器端渲染(SSR)&#xff1f; Vue.js 是构建客户端应用程序的框架。默认情况下&#xff0c;可以在浏览器中输出 Vue 组件&#xff0c;进行生成 DOM 和操作 DOM。然而&#xff0c;也可以将同一个组件渲染为服务器端的 HTML 字符串&#xff0c;将它们直接发送到浏览器&a…

vue服务端渲染缓存应用详解

服务端渲染简介 服务端渲染不是一个新的技术&#xff1b;在 Web 最初的时候&#xff0c;页面就是通过服务端渲染来返回的&#xff0c;用 PHP 来说&#xff0c;通常是使用 Smarty 等模板写模板文件&#xff0c;然后 PHP 服务端框架将数据和模板渲染为页面返回&#xff0c;这样的…

JavaScript中高阶函数的魅力

前言 一个函数就可以接收另一个函数作为参数,简言之,函数的参数能够接收别的函数,这种函数就称之为高阶函数 JavaScript 的高阶函数跟 Swift 的高阶函数类似 常见的高阶函数有: Map、Reduce、Filter、Sort 高阶函数是指至少满足下列条件之一的函数 1&#xff1a;函数可以作…

深入浅析angular和vue还有jquery的区别

angularjs简单介绍和特点 首先angular是一个mvc框架, 使用mvc解耦, 采用model, controller以及view的方式去组织代码, 会将一个html页面分成若干个模块, 每个模块都有自己的scope, service, directive, 各个模块之间也可以进行通信, 但是整体结构上是比较清晰的, 就是说其代码…

原生js实现form表单序列化的方法

当我们有form表单而且里面的表单元素较多时&#xff0c;咱们总不能一个个去获取表单元素内的值来进行拼接吧&#xff01;这样会很让人蛋疼&#xff01;为了方便与后台交互并且提高自己的开发效率&#xff0c;并且不让你蛋疼&#xff1b;我们一起用原生来写一个表单序列化方法&a…

使用Vue实现图片上传的三种方式

项目中需要上传图片可谓是经常遇到的需求&#xff0c;本文将介绍 3 种不同的图片上传方式&#xff0c;在这总结分享一下&#xff0c;有什么建议或者意见&#xff0c;请大家踊跃提出来。 没有业务场景的功能都是耍流氓&#xff0c;那么我们先来模拟一个需要实现的业务场景。假设…

JS实现select选中option触发事件操作示例

本文实例讲述了JS实现select选中option触发事件操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 我们在用到下拉列表框select时&#xff0c;需要对选中的选项触发事件&#xff0c;其实本身没有触发事件方法&#xff0c;我们只有在select里的onchange方法里触发。…