之前小程式專案沒有使用任何框架,本來開發時間太早,那會兒小程式生態不是很成熟,最近專案鬆,想把之前的程式碼重構一下,選用的wepy框架,之所以選擇wepy,最重要的原因還是由於它是騰訊開源的框架,在使用中也遇到了一些問題,會持續把遇到的問題記下來;
(1)在app.wpy檔案中,我自定義了一些方法,其中包括對request的封裝,根據官方文件描述,在page頁面可以使用this.$parent來獲取,如下
app.wpy
doPost() {
console.log('app.wyp')
}
...
index.wpy // page頁面
...
onLoad() {
console.log(this.$parent.doPost())
"app.wpy"
}
複製程式碼
如果只是單純的page頁面使用,那是不會有什麼問題的; 如果在component元件頁面,如下
index.wpy // page頁面
import wepy from 'wepy';
import tel from '../components/tel' // component元件頁面
export default class Index extends wepy.page {
components = {
tel
}
}
tel.wpy //元件頁面
import wepy from 'wepy';
export default class Conchat extends wepy.component {
onLoad() {
console.log(this.$parent) // 會指向父元件
console.log(this.$parent.$parent) // 會指向app.wpy
}
}
複製程式碼
wepy官方文件中是這麼寫的:https://tencent.github.io/wepy/document.html#/api?id=wepycomponent-class
現在還有一種情況,會導致一些問題,大家都知道,wepy完全是類vue的開發風格,它裡面也有mixin混合功能,這個無疑為我們開發帶來很高的體驗,接著上面的問題,如果在mixin中定義了一個公用的方法,如下:
mixin.js
import wepy from 'wepy';
export default class ScanRed extends wepy.mixin {
onLoad() {
console.log(this.$parent.doPost())
}
}
index.wpy;
...
mixins = [mixin];
輸出的結果為"app.wpy";
tel.wpy;
...
mixins = [mixin];
程式碼就會報錯,doPost方法是未定義的
複製程式碼
這是因為,在tel.wpy中,this.$parent指向的是index.wpy; 這個時候就有點尷尬了。。。
所以在mixin定義的js中,我們可以使用wepy.$instance
wepy.$instance === this.$parent //true
複製程式碼
這個在官方文件中沒有提及,可能不是很建議這種方法吧,其實在我遇到這個問題的時候,我也發現自己之前的寫法上面有點錯誤,最好的處理方式是,自定義的方法和類,建立一個單獨的js檔案,這樣就不會有這種尷尬了;