vue項目向小程序遷移調研


概述

今天調研了一下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)
  }
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM