Vant庫對於開發商城類專案,真的是非常nice,會讓你情不自禁愛上它。Vant庫支援按需載入、為移動端商城設計的風格,非常完美。但是,本人在實際開發中,也遇到了一些小問題,折騰了老半天,最終得以解決。下面先說說在vue中使用Vant庫的流程及一些注意事項,以及遇到的坑和解決辦法。
首先送上官網傳送門:www.youzanyun.com/zanui/vant#…,具體的api可自行查閱使用。
第一步,安裝:
cnpm i vant -S
複製程式碼
第二步,引入元件:
關於怎麼引入Vant元件,有全域性引入(非常不推薦)和按需引入兩種方式
這裡演示按需引入的方式,因為官網說的稍微有些複雜,對於一些剛接觸的小夥伴,可能會造成一些誤解(PS:我在剛開始接觸的時候這裡就蹲了兩個坑,簡直欲哭無淚呀~)。直接說怎麼用吧:
- 為了方便我們按需引入元件,這裡還需要安裝一個外掛
cnpm i babel-plugin-import -D
複製程式碼
- 安裝好該外掛好,還需要在.babelrc檔案中plugins那裡進行一個簡單的配置,這裡附上完整的plugins部分內容。這裡我們在plugins陣列中插入了import那個陣列,其他內容是原來就有的。
"plugins": [
"transform-vue-jsx",
"transform-runtime",
["import", {
"libraryName": "vant",
"libraryDirectory": "es",
"style": true
}]
]複製程式碼
- 完成好配置後,在main.js中按需引入你需要的元件。例如這裡引入Vant的button元件:
import { Button } from 'vant'; // 在mian.js中通過import匯入元件,多個元件直接在{,,,}加入即可
Vue.use(Button); //讓vue載入該元件如果還需要用其他元件,可以這樣寫Vue.use(Button).use().user();複製程式碼
<van-button type="default">預設按鈕</van-button> // 在template中使用元件複製程式碼
- 這裡提一點,如果是類似Toast這種元件,只需要在main.js中引入就好:
import { Toast } from 'vant';
// 然後在你需要的頁面直接這樣使用就好
// 只要引入後,vant就會自動把Toast元件掛在vue的原型上Vue.prototype.$Toast = Toast;
this.$Toast('message');複製程式碼
可以看到,這裡button元件以及正常匯入使用了。Vant中還有更多適合實際開發的功能更豐富的元件,小夥伴們自行查閱官方文件使用吧。附官網API文件傳送門:www.youzanyun.com/zanui/vant#…
最後,在說一個關於Vant日期元件使用時所遇到的一個大坑。
Vant日期元件的官網api沒有給出關於事件函式的使用demo,到時小編在使用時不小心邁進了一個大坑。就是change或者confirm事件時,怎麼都獲取不到回撥引數,即在點選確定時回去不到返回的選中時間,總是提示undefined或者null。下面是小編錯誤的寫法,大家不要踩坑:
<!--這是html部門-->
<van-datetime-picker
v-model="currentDate"
type="datetime"
@confirm="confirm()"
@change="change()" />
// 這是對應的方法
methods: {
confirm(val) {
console.log(val)
},
change(e) {
console.log(e.getValues())
}
}複製程式碼
乍一看,是按照文件上說的方式使用的呀,可是不僅confirm沒有返回選中的日期時間,change事件的各種回撥方式也使用不了。但是吧,如果你要列印1,又可以列印出來,說明介面走這個方法了。到底怎麼回事呢,選中的時間怎麼就出不來呢?小編差點都要懷疑是不是這個Vant元件有問題了!
說重點:後來小編終於找到了解決辦法:
原來是這裡出了問題,@confirm="confirm()" @change="change()"
這裡多加了一對括號,正確的寫法是
<!--這是html部分-->
<van-datetime-picker
v-model="currentDate"
type="datetime"
@confirm="confirm"
@change="change"
/>
// 這是對應的方法
methods: {
confirm(val) {
console.log(val) // 列印出了時間
},
change(e) {
console.log(e.getValues()) // 列印出了選中的時間,是個陣列
}
}複製程式碼
到這,問題圓滿解決了!希望對小夥伴們有幫助