從vue到mpvue再到微信小程序,這么幾天下來感覺被搞暈了。三者之間的很多功能存在差異,項目也快接近尾聲了,坑也踩了很多了,現在給后來的你們一點總結性經驗:
1. 在模板中,動態插入HTML的v-html指令不可用
這條很好理解,小程序的界面並不是基於瀏覽器的BOM/DOM的,所以不能動態的在界面模板里直接插入HTML片段來顯示。
題外話,如果有在小程序里插入html片段的需求怎么辦?可以用<rich-text>組件或者wxParse(https://github.com/icindy/wxParse)來實現。
2. 在模板中,用於數據綁定的雙括號語法{{}}中的表達式功能存在諸多限制
在Vue本身的模板內雙括號語法中,我們可以對綁定變量進行比較豐富的處理,比如:
- 可以調用
methods下的函數, 例如:
<template>
<div>{{ formatMessage(msg) }}</div>
</template>
<script>
export default {
data() {
return {
msg: "Hello,World"
}
},
methods: {
formatMessage(str) {
return str.trim().split(',').join('#')
}
}
}
</script>
- 如果變量是對象的話,也可以調用對象的成員方法
<div>{{ msg.trim().split(',').join('#') }}</div>
- 可以使用過濾器來處理變量,最有用的場景算是格式化數據了
<div>{{ msg | format }}</div>
以上這些好用的功能,在mpvue中,記得都是通通不能用的哦!!!
我們只能在雙括號中使用一些簡單的運算符運算(+ - * % ?: ! == === > < [] .)
但是也得找些可用的替代方案吶,大伙先考慮使用計算屬性(computed)來做吧。
3. 在模板中,除事件監聽外,其余地方都不能調用methods下的函數
4. 在模板中,不支持直接綁定一個對象到style或class屬性上
5. 在模板中,嵌套使用v-for時,必須指定索引index
6. 事件處理中的注意點
// 左側為WEB事件 : 右側為對應的小程序事件 { click: 'tap', touchstart: 'touchstart', touchmove: 'touchmove', touchcancel: 'touchcancel', touchend: 'touchend', tap: 'tap', longtap: 'longtap', input: 'input', change: 'change', submit: 'submit', blur: 'blur', focus: 'focus', reset: 'reset', confirm: 'confirm', columnchange: 'columnchange', linechange: 'linechange', error: 'error', scrolltoupper: 'scrolltoupper', scrolltolower: 'scrolltolower', scroll: 'scroll' }
除了上面的之外,Web表單組件<input>和<textarea>的change事件會被轉為blur事件。
7. 對於表單,請直接使用小程序原生的表單組件
一句話,表單組件又多又復雜,框架可能Hold不住。所以在實際開發中,推薦直接使用小程序的表單組件標簽來寫,而不是使用Web的表單組件標簽來寫。當然了,在mpvue中使用了小程序的組件標簽,數據綁定功能還是完全可以用的。給個示例:
<template>
<div>
<picker @change="handlePickerChange" :value="selectedIndex" :range="messages">
<view class="picker">當前消息:{{ messages[selectedIndex] }}</view>
</picker>
</div>
</template>
<script>
export default {
data () {
return {
selectedIndex: 0,
messages: ['Hello', 'World', 'Haha']
}
},
methods: {
handlePickerChange (e) {
console.log(e)
}
}
}
</script>
其他注意事項
另外,在Vue開發Web應用的時候,通常使用vue-router來進行頁面路由。但是在mpvue小程序開發中,不能用這種方式,請使用<a>標簽和小程序原生API wx.navigateTo等來做路由功能。
還有就是請求后端數據,我們通常在Web開發中使用axios等ajax庫來實現,但是在小程序開發中也是不能用的,也請使用小程序的原生API wx.request等來進行。
原文鏈接:https://www.jianshu.com/p/579035fc9c18
