概述

今天调研了一下vue项目怎么向小程序迁移,有些心得,记录下来,供以后开发时参考,相信对其他人也有用。

基本上vue项目向小程序迁移不外乎2种方法,一种是用小程序的web-view组件,另一种是用mpvue重新开发一个。第二种成本太高,所以我这里调研的基本上是第一种方法。

解决方案

对于一般项目来说,直接在小程序中给web-view组件的src填入vue项目的地址即可。但是web-view组件有如下限制:

1.web-view组件的src不能动态变化。这个限制基本可以无视,因为我们是单页面,不需要经常改变web-view的src。但是有些特殊情况需要考虑这个限制,比如我们使用setData方法通过判断url的参数来加载web-view的src是行不通的。

2.小程序的page中只能存在一个web-view。这个限制也可以无视,因为我们只需要一个web-view就行了。

3.web-view里面的项目,不能用window.open(xx, '_blank'),但是可以用window.open(xx, '_self')。

我们项目中有用到window.open(xx, '_blank'),所以我们需要判断是不是小程序环境,是的话就把window.open(xx, '_blank')改成window.open(xx, '_self')。判断方法有如下2种:

// 方法1(推荐)——要求:微信版本>=7.0.0
// 通过判断userAgent中包含miniProgram字样来判断小程序web-view环境。
export function isMiniProgram() {
return !!navigator.userAgent.match(/miniProgram/i);
} // 方法2——无要求
// 引入微信sdk,然后用微信sdk判断
npm install weixin-js-sdk --save wx.miniProgram.getEnv(function(res) {
console.log(res.miniprogram); //true
});

基本上按照上面的方法就可以使用web-view迁移vue项目到小程序中了。

其它

在调研过程中我还踩了一个其它的坑,这里也记录下来。

1.使用微信sdk的postMessage传的值必须是字符串,所以对于对象来说需要先用JSON.stringify处理一下。

wx.miniProgram.postMessage({ data: JSON.stringify(navigator.userAgent) });

2.web-view的bindmessage属性可以接受postMessage传递过来的值,但是它只会在特定时机(小程序后退、组件销毁、分享)才触发。所以不能期望,马上传完值,web-view就能马上接收到并做出响应。

3.官方文档对于navigateTo的描述有误。传递的值并不在options.query里面,而是就在options里面

wx.navigateTo({
url: 'test?id=1'
}) // test.js
Page({
onLoad(options) {
console.log(options.id)
}
})

vue项目向小程序迁移调研的更多相关文章

  1. 直击--vue项目微信小程序页面跳转web-view不刷新-根源

    背景 最近项目需要适配小程序,项目是使用了vue开发的网站,其中改造方式是,每个页面都使用小程序创建一个页面通过web-view来显示指定页面的. 在没有使用小程序时,路由跳转时,刷新页面等等,这个是 ...

  2. 学了这么久,vue和微信小程序到底有什么样的区别?

    前言 写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别.相比之下,小程序的钩子函数要简单得多. 一.生命周期 先贴两张图: vue生命周期 小程序生命周期   相比之下 ...

  3. 只会Vue怎么开发小程序?vue和微信小程序的到底有哪些区别?

    写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别. 一.生命周期 先贴两张生命周期图对比下: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. v ...

  4. uniapp小程序迁移到TS

    uniapp小程序迁移到TS 我一直在做的小程序就是 山科小站 也已经做了两年了,目前是用uniapp构建的,在这期间也重构好几次了,这次在鹅厂实习感觉受益良多,这又得来一次很大的重构,虽然小程序功能 ...

  5. vue 开发微信小程序

    介绍 mpvue (github 地址请参见)是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心,mpvue 修改了 Vue.js的 runtime 和 compiler 实 ...

  6. vue和微信小程序的区别、比较

    链接:https://segmentfault.com/a/1190000015684864 一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. vue ...

  7. 微信小程序迁移到头条小程序工具

    最近公司需要将微信小程序迁移到头条小程序,比较得知微信和头条小程序的写法类似,只有文件名称不同,相关的指令不同,以及头条在ttml绑定的数据不可使用function,于是就写了node脚本来实现这些重 ...

  8. .vue,跟小程序文件在sublime里面怎么实现代码格式化

    .vue文件跟小程序的.wxml,.wxss用sublime的HTML/CSS/JS prettify插件也可以实现格式化代码的效果 首先你在sublime要已经安装好了HTML/CSS/JS pre ...

  9. Vue和微信小程序区别

    一.生命周期 先贴两张图: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. vue的钩子函数在跳转新页面时,钩子函数都会触发,但是小程序的钩子函数,页面不同的跳转方式,触发的钩 ...

随机推荐

  1. 『自我の感悟』alt or title?

    img标签中alt和title属性的正确使用:在的img标签有两个属性分别为alt和title,对于很多初学者而言对这两个属性的正确使用都还抱有迷惑,当然这其中一部分原因也是ie浏览器所导致的.正确的 ...

  2. git fatal: 远程 origin 已经存在。

    不小心将git远程地址配错了,再次配置提示以下错误: fatal: 远程 origin 已经存在. 此时只需要将远程配置删除,重新添加即可: git remote rm origin git remo ...

  3. fileWriter.go

    package blog4go import ( "fmt" "path" "strings" ) // NewFileWriter ini ...

  4. 【bzoj1941】【Sdoi2010】Hide and Seek

    ---恢复内容开始--- Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡 ...

  5. BZOJ_1877_[SDOI2009]晨跑_费用流

    BZOJ_1877_[SDOI2009]晨跑_费用流 题意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出 ...

  6. [NOIP2014]飞扬的小鸟 D1 T3 loj2500 洛谷P1941

    分析: 这是一个DP,没什么好说的,细节很烦人. DP[i][j]表示到第i个位置,高度为j点最少的次数. 转移: 当j=m时 k属于[m-h,m]都可以向DP[i][j]转移,即dp[i][j]=m ...

  7. MYSQL一键安装

    #!/bin/bash #baishuchao qq:995345781 ############################################################### ...

  8. 经典Hash函数的实现

    Hash函数是指把一个大范围映射到一个小范围.把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存. 除此以外,Hash函数往往应用于查找上.所以,在考虑使用Hash函数之前,需要明白它 ...

  9. JAVA SPI(Service Provider Interface)原理、设计及源码解析(其一)

    背景 团队内部轮流技术分享,其他人都是分享源码,我每次都是设计和架构,感觉自己太特立独行.这次我要合群点,分享点源码. 概念 Service Provider Interface:服务提供方接口.是一 ...

  10. NumPy 超详细教程(2):数据类型

    系列文章地址 NumPy 最详细教程(1):NumPy 数组 NumPy 超详细教程(2):数据类型 NumPy 超详细教程(3):ndarray 的内部机理及高级迭代 文章目录 NumPy 数据类型 ...