作爲vue
語法開發的跨平臺開發框架雖然願望很美好,但是真的要實現跨平臺還是需要開發者搭建好的項目架構,靈活運行vue
語法和模塊化開發思維。
H5適配
官方創新很好,又爲我們創造了一個尺寸單位,upx
,但是考慮到項目遷移和開發通用,我決定還是使用px
配合flexible
實現適配,確保項目可以輕鬆移植到uni框架,需要改動@dcloudio/vue-cli-plugin-uni/packages/postcss
文件,在postcss.config.js
文件中引入的,保證我們小寫px
自動轉換rem
,大寫的不轉換,默認採用750px
的設計稿,所以其他尺寸設計稿的需要注意轉換:
利用條件編譯在main.js
中引入flexible.js
,這樣就可以實現H5
的適配,同時保證了我們的現有項目無縫升級到uni
框架。當然在頁面js
動態設置的px
需要我們自己衡量是否需要適配,可以使用flexible
自定義全局函數轉換rem
。其他小程序px
轉換規則保持不變。
prop單向數據流特性
當我們對組件重複設置某些屬性爲相同的值時,數據不會同步到view
層。這就導致數據與視圖顯示不匹配,這時我們需要的是手動同步組件狀態,當組件內部狀態改變時,對外觸發事件,將新的狀態以參數的形式傳遞出去,這樣才能同步組件數據,父組件更改時,子組件也就能更新視圖了。
子組件:
$emit('事件名稱','數據');
父組件:
@事件名稱=“處理事件”
聲明週期那些事
首先我們需要清楚幾個概念,應用生命週期,頁面生命週期,還有組件生命週期:
應用生命週期
是項目啓動的過程,主要是在App.vue中聲明的,包括下面幾個:
在onLanch
中我們可以獲取啓動參數,包括scene
等;其他的我們根據需要處理自己的邏輯。
頁面生命週期
每個頁面單獨的生命週期,我們經常會用到onLoad
,可以獲取頁面參數,當然我們可以自己封裝一層頁面組件,然後將頁面參數綁定到當前頁面實例$query
,保證了同vue
一致的開發體驗。onReady
代替vue的mounted
,此時可以訪問頁面實例以及視圖結構。
組件生命週期
區別於頁面生命週期,沒有onShow
,onLoad
,但是vue
的生命週期是支持的,created
等。
跨端注意
雖然框架提供跨端能力,但是各個平臺表現還是有些不一致的,有時我們需要自己對齊,抹平平臺差異,保證開發一致。以下整理常見差異,並提供參考解決方案,作爲我們開發時需要注意的:
1、頁面和組件的數據data
聲明爲方法返回一個對象,保證數據正確銷燬。
2、開發統一採用vue
語法的開發方式,模板數據綁定和事件監聽。
3、頭部導航欄建議採用自定義的方式,下拉刷新採用mescroll-uni
版的,體驗相對較好,而且可以自定義樣式,保證跨端開發以及表現一致。
4、文件名或文件夾名中不允許出現 @
符號。canvas
統一加id
和canvas-id
,v-if
和v-for
不要作用在用一個標籤上,必要時使用block
或者template
。
5、圖片資源使用絕對路徑,背景圖片使用~@/static
的絕對地址的方式。
6、暫時不支持跨端v-html
模板語法,所以儘可能使用條件編譯在H5
端使用。
7、目前測試在H5
和微信小程序端可以使用過濾器和模板中使用自定義函數。
8、組件裏使用 slot
嵌套的其他組件時不支持 v-for
,動態組件,異步組件暫不支持,不支持自定義組件上原生事件,直接綁定style
,class
,keep-alive
,transition
等,建議不要使用v-show
。
9、微信中v-for
在事件中使用item
傳參時,訪問不到item
,但是可以使用索引傳遞,目前官方標記爲bug
,暫時可以通過索引曲線實現。