第一次寫小程序恩够,遇到了很多問題,便想記錄下來羡铲。
在這里對(duì)小程序注冊(cè)就不做過多贅述蜂桶。
如有問題,歡迎指正也切。
分包
在開發(fā)小程序前扑媚,最好先根據(jù)自己開發(fā)的功能模塊或其他邏輯做好分包,不然后期在上傳代碼時(shí)報(bào)錯(cuò)才發(fā)現(xiàn)這個(gè)問題雷恃,再去分包就很麻煩疆股。小程序限制每個(gè)包不超過2M,可以分9個(gè)子包倒槐,總包大小不超過20M旬痹。
pages是主包,里面放置默認(rèn)啟動(dòng)頁面/TabBar頁面,目錄名為page_開頭的都是分包两残。
分包步驟
開啟分包優(yōu)化
使用分包之后會(huì)發(fā)現(xiàn)子包的組件和js文件會(huì)被打包到主包的vendor.js文件中永毅,這就導(dǎo)致了vendor.js過大引起主包超過2M(在微信開發(fā)者工具中可查看)
這時(shí)就需要開啟分包優(yōu)化:打開manifest.json→源碼視圖在mp-weixin節(jié)點(diǎn)下,添加如下代碼
"optimization" : {
"subPackages" : true
}
開啟之后重新發(fā)布打包微信小程序人弓,分包的js文件將不會(huì)再打包到主包的vendor.js中了沼死。
在pages.json中配置路徑
在pages.json中添加subPackages數(shù)組,切記要放在pages后面票从,否則無法生效漫雕。
隱私保護(hù)設(shè)置
在2023年10月30日發(fā)現(xiàn)小程序中所有上傳圖片處點(diǎn)擊無反應(yīng),無法換起從手機(jī)選擇圖片或拍照上傳功能(之前可以正常使用)峰鄙。
在查詢搜索之后發(fā)現(xiàn)是隱私保護(hù)配置的問題浸间,下圖為微信官方文檔中的截圖,具體內(nèi)容可進(jìn)入頁面查看
https://developers.weixin.qq.com/miniprogram/dev/framework/user-privacy/PrivacyAuthorize.html
以下為隱私保護(hù)設(shè)置步驟:
在微信公眾平臺(tái)中找到設(shè)置
基本設(shè)置中找到服務(wù)內(nèi)容聲明吟榴,更新用戶隱私保護(hù)指引
根據(jù)需要使用的功能設(shè)置隱私協(xié)議
設(shè)置完成后生成即可使用功能
當(dāng)然上傳圖片的域名也需要再微信公眾平臺(tái)中配置好
掃描普通二維碼魁蒜,進(jìn)入小程序
在微信公眾平臺(tái)中開發(fā)管理→開發(fā)設(shè)置→掃普通鏈接二維碼打開小程序進(jìn)行配置,小程序需發(fā)布方可使用
同時(shí)代碼中的路徑需要保持一致
<view class="qrimg">
<tki-qrcode ref="qrcode" :cid="cid" :val="scanUrl" :size="400" :onval="true" :loadMake="true" :usingComponents="false" loadingText="二維碼生成中" @result="qrR" />
</view>
<script>
import tkiQrcode from "@/components/tki-qrcode/tki-qrcode.vue"
export default {
components: {
tkiQrcode
},
data() {
return {
cid: 'tki-qrcode-canvas', // 二維碼唯一ID
src: '', // 二維碼生成后的圖片地址或base64
user: {
id: '',
name: '',
},
scanUrl: ''
};
},
onLoad(option) {
const item = JSON.parse(decodeURIComponent(option.user));
console.log('item', item)
this.user.id = item.id
const name = item.name.replace(/"/g, '');
if (name === 'null') {
this.user.name = ''
} else {
this.user.name = name
}
this.scanUrl = 'https://*****.cn/?doctorId=' + this.user.id
},
methods: {
qrR(e) {
console.log('e', e)
console.log('this.scanUrl', this.scanUrl)
}
}
}
</script>
體驗(yàn)版緩存問題
發(fā)現(xiàn)該問題是因?yàn)樵跍y(cè)試階段吩翻,內(nèi)部人員有限兜看,需要時(shí)不時(shí)刪除數(shù)據(jù)再重新下拉最近使用的小程序測(cè)試,就導(dǎo)致原來的小程序中緩存了數(shù)據(jù)狭瞎,但實(shí)際數(shù)據(jù)已刪除细移,產(chǎn)生數(shù)據(jù)問題,頁面加載出錯(cuò)熊锭,開發(fā)人員以為是代碼問題弧轧,排查了很久,才知道目前微信小程序不支持在體驗(yàn)版里獲取版本號(hào)碗殷,來判斷是否有版本更新精绎,正式版里可以做到判斷版本更新后自動(dòng)清除緩存,所以在體驗(yàn)版里只能由用戶手動(dòng)清除緩存再重新掃描體驗(yàn)版二維碼進(jìn)入锌妻。
uni.navigateTo改為uni.navigateBack
開發(fā)中遇到一個(gè)問題從A頁面進(jìn)入B頁面代乃,B頁面進(jìn)入C頁面,C頁面返回B頁面需要攜帶參數(shù)仿粹,之前我使用的是uni.navigateTo
uni.navigateTo({
url: '/page_addFollowupSummary/addFollowupSummary/addFollowupSummary?item=' + encodeURIComponent(JSON.stringify(item)) + '&from=' + 'followupSummaryTemplate'
})
從C頁面返回到B頁面搁吓,期望再點(diǎn)擊返回按鈕從B頁面回到A頁面,但這時(shí)B頁面的上一個(gè)頁面是C頁面吭历,就導(dǎo)致回到了C頁面擎浴,形成了循環(huán),我首先錯(cuò)誤的想到去修改返回的頁面棧毒涧,getCurrentPages()可以獲取當(dāng)前頁面棧的實(shí)例,以數(shù)組形式按棧的順序給出,數(shù)組中的元素為頁面實(shí)例契讲,第一個(gè)元素為首頁仿吞,最后一個(gè)元素為當(dāng)前頁面。但我發(fā)現(xiàn)捡偏,不僅不能修改唤冈,且官方也不推薦修改。
所以后面改成了使用uni.navigateBack银伟,將需要使用到的參數(shù)先緩存你虹,在B頁面獲取使用完之后再清除,完美解決該問題彤避。
//C頁面
addTemplate(item) {
uni.setStorageSync('params',item)
uni.navigateBack()
}
//B頁面
onShow(){
let params = uni.getStorageSync('params'); // 讀取參數(shù)值
this.messageContent = params.value;
uni.removeStorageSync('params');
}
未完待續(xù)......