0%

Vue.js 電商練習技術整理 -- 利用 v-model 技巧建立表單篩選功能

文章目的

當我們在使用電商網站時無論是前後台都會因為資料過多,無法即時找到含有特定條件的資料,本文將示範利用 v-model 簡單建立出後台的訂單篩選功能。

搞懂篩選機制(單選)

我們可以利用 radio 做出單選的篩選表單出來,當我們點選需要的 radio 時透過 value 出來的值來決定要顯示的資料。

替 radio 綁定 v-model

為甚麼要用 v-model 呢?原因是我們可以在每次點選 radio 時將 value 的值透過 v-model 儲存在 Vue 的 Data 裡,再利用 v-for 做資料篩選,以下是 radio 程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<div class="form-check m-2">
<input class="form-check-input" type="radio" name="paidRadios" id="allRadios" value='all' checked v-model="selectOption">
<label class="form-check-label" for="allRadios">全部</label>
</div>
<div class="form-check m-2">
<input class="form-check-input" type="radio" name="paidRadios" id="paidRadios" value="paid" v-model="selectOption">
<label class="form-check-label text-success" for="paidRadios">已付款</label>
</div>
<div class="form-check m-2">
<input class="form-check-input" type="radio" name="paidRadios" id="unpaidRadios" value="nopaid" v-model="selectOption">
<label class="form-check-label text-muted" for="unpaidRadios">未付款</label>
</div>
</div>

這邊可以看到上述程式碼有3組個 radio 選項,每個選項的 value 值都不同,但都綁定相同的 v-model,當我們點選選項時,選項的 value 值就會被存進我們綁定的 v-model 上。

撰寫篩選條件

表單資料部分,利用 computed 做資料的篩選條件,像本次範例就以已付款未付款作為篩選條件,以下是 computed 的範例程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
computed: {
selectOrders () {
const vm = this
if (vm.selectOption === 'all') {
return vm.orders
} else if (vm.selectOption === 'paid') {
return vm.orders.filter((item) => {
return item.is_paid //已付款
})
} else if (vm.selectOption === 'nopaid') {
return vm.orders.filter((item) => {
return !item.is_paid //未付款
})
}
}
}

這邊針對上述程式碼做個解釋,我們先將從後端抓到的所有訂單資料儲存在 orders 這個陣列裡,接著透過我們 v-model 綁定的 selectOption 來篩選特定條件的資料。
如果有預設頁面的顯示資料的話可以先在 selectOption 填入對應的值,像是如果一開始顯示全部資料我們可以填入all
這樣就完成一個簡單的資料篩選功能囉~~~

參考資料

Vue.js: data、v-model 與雙向綁定