Vue 實作 check box 全選與取消全選
check box 全選與取消全選有 2 種做法可以實現這個功能,可以使用 methods 來實現,也可以使用 computed 來監聽「全選的核取框」。
使用 methods 方法實作
- 全選的 check box 雙向綁定到 allChecked 這個資料狀態,預設的布林值為 false。
- checkList 這個資料狀態是一個陣列,存放所有的 check box 選項。
- 在 data 中準備一個 checkedItems 的空陣列。
- 使用 v-for 把 checkList 裡面的資料渲染成一個一個的 check box 選項,與 checkedItems 雙向綁定。
- 在
methods
中,準備一個 allCheckedFn 的方法,綁定change事件到「全選」的核取框,把 checkList 裡面的的選項 map 到一個 arr 空陣列,點擊全選的時候,allChecked會變成 true ,然後使用 三元運算式判斷,當 allChecked 為 true 的時候,checkedItems(與所有選項雙向綁定)會被賦值為 arr ,allChecked 為 false 的時候為空陣列:
- changeFn這個方法,比對 checkedHeros 的陣列長度與 核取框原始資料陣列長度 是否一致,返回一個布林值,賦值給 全選 allChecked 這個資料狀態。
使用 computed 實作
使用 computed 監聽 allChecked 這個資料狀態,然後 allChecked 與全選框綁定。checkedItems 與所有的選項雙向綁定。
- get 的部分是監聽所有的選項,所有選項都打勾時,全選會被核取。
- 使用三元運算子,當 checkList 的陣列長度等於 checkedItems 的陣列長度時,全選會打勾。
- set 的部分是監聽全選框,全選核取時,所有的選項都會打勾。
- 設一個 selected 空陣列,當全選框勾選時,value 為 true,會把 checkList 裡的選項推到 selected,把 selected 賦值給 checkedItems,這時所有選項都會打勾。
- 當全選框沒有勾選時, value 為 false,selected 為空陣列,checkedItems 裏沒有選項。