
練習主題
有一 table 表格,透過點擊資料條件細目,使 table 項目按照資料順序排列,由小至大或由大至小。
- 有 click 事件。
- 使用到 sort 的方法。
- 使用 v-for 傳入 data 資料。
- 使用 v-if 做判斷。
- 使用 v-bind 動態增加 class 名稱。
建立 table 表格
首先建立一個表單,並把 th 寫好,架構基本上就完成了。
1 | <table class="table"> |
建立 data 資料
目前範例沒有使用 AJAX,是使用現有的 data 資料,所以建立在 Vue 物件中的 data 屬性中,這個資料是一個 JSON 格式,也將其資料用一個變數 data 存放。
1 | data: { |
匯入資料
使用 v-for 匯入資料,在 td 的外層 tr 中,使用v-for,這樣就會將依序帶入 td 中。
官方文件表示:
2.2.0+的版本里,当在组件上使用v-for时,key现在是必须的。
所以程式碼如下,並於 td 中透過模板語法顯示我們要顯示的內容。
1 | <tr v-for="item in sortData" :key="item.price"> |
判斷條件
HTML
在要點擊與判斷的項目是加上 click 事件與 v-if 判斷條件,以價格為例:
- 點擊事件對應的
changeType()方法,其參數帶入price,要在點擊價錢後會依照價錢的資料多寡要做排序。 - 將上下反轉的圖示獨立出來,用
<span>包住fontawesome的標籤,並在span上做判斷是否為上或下。 - 到期日方式一樣,故照本宣刻。
- 因為會使用共同的樣式設定,所以
class名稱也設定為一樣就可避免重工。
1 | <th class="click" @click="changeType('price')"> |
Vue
建立 methods 跟 computed,因 @click 一定會對應到 methods,
1 | data:{ |
設定排列類型條件名稱為
sortType,其值設定為price,isReverse是設定font-awesome圖案的方向初始條件(CSS 是設定為往上)。changeType方法說明:changeType(type)宣告一個vm變數為自己(this),如果vue物件的sortType為type的時候,就可以完成開關,若不符合這個條件,則設定值為 false。- 最後面這行
vm.sortType = type;是同步給到期日自己的判斷來使用。
computed屬性結果說明:- 宣告 vm 變數為
computed運算方法本身(this)。vue 包裝後的 this,在不同屬性中不會互相影響。
data中的sortType預設值為price,所以使用price這個順序來排列。- 宣告
type變數為vm.sortType的這個值。 - 回傳 data 的排序,使用 sort 的方法,並給予判斷式讓
type由小至大或是由大至小來排列。
- 宣告 vm 變數為