練習主題
有一 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 變數為