ElementUI的Table表格新增自定義頭CheckBox多選框
在ElmentUI的Table表格元件中,也許你會使用type為selection值的多選框功能,但是此時設定的label屬性不生效,不能設定標題名稱;有時候我們的需求就是要新增標題名稱,那該如何處理呢?當然你可以對其樣式做特殊處理,也可以自定義標題,本文將描述如何利用自定義標題來新增多選框和標題名稱,特別是在該過程的踩過的雷和填補過的坑。
(一)需求:在Table表格中新增一列用於批量操作當前頁的該列,例如:通過多選框來對批量設定該列的兩種屬性狀態,選中時表示全部隱藏,不選中時表示全部顯示,若部分隱藏、部分顯示時多選框呈現第三種樣式狀態,一般是短橫線表示。
(二)方案:利用Table表格column的header屬性。
- 利用插槽進行設定,即slot="header",這樣就可以在表頭中自定義樣式來;若不設定該屬性,那麼是對列內容進行設定。
- 具體的程式碼如下:
首先在工程目錄下安裝element,通過npm i element-ui -S命令安裝即可; 然後在工程中引入element,在main.js檔案中新增這樣兩條語句: import ElementUI from 'element-ui'; Vue.use(ElementUI); 接著,我們在App.vue檔案中進行測試,新增如下程式碼:
<template>
<div id="app">
<img src="./assets/logo.png">
<el-table :data="tableData" style="width: 100%">
<el-table-column
label="姓名"
prop="name">
</el-table-column>
<el-table-column
label="性別"
prop="sex">
</el-table-column>
<el-table-column align="right">
<template slot="header" slot-scope="scope">
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll"
@change="handleCheckAllChange">隱藏</el-checkbox>
</template>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.checked" @change="handleCheckOneChange">隱藏</el-checkbox>
</template>
</el-table-column>
</el-table>
<router-view/>
</div>
</template>
<script>
export default {
name: 'App',
data () {
return {
tableData: [{
name: '李時珍',
sex: '男',
checked: false
}, {
name: '花木蘭',
sex: '女',
checked: true
}],
checkAll: false,
isIndeterminate: true
}
},
methods: {
handleCheckAllChange (val) {
console.info('check all change is ', val)
this.isIndeterminate = false
this.tableData.forEach(item => {
item.checked = val
})
},
handleCheckOneChange (val) {
console.info('check one change is ', val)
let totalCount = this.tableData.length
let someStatusCount = 0
this.tableData.forEach(item => {
if (item.checked === val) {
someStatusCount++
}
})
this.checkAll = totalCount === someStatusCount ? val : !val
this.isIndeterminate = someStatusCount > 0 && someStatusCount < totalCount
}
}
}
</script>
- 執行後的效果圖如下:
在上圖中,我們可以通過表頭的隱藏多選框來批量設定列表資料,當我們選中上圖“表頭隱藏”多選框時,列表中的兩個“隱藏”多選框都會被選中;當我們取消“表頭隱藏”多選框時,列表中的兩個“隱藏”多選框會同時被取消選中;當我們同時選中列表中的兩個“隱藏”多選框時表頭的“表頭隱藏”多選框也會被選中;當我們同時取消列表中兩個“隱藏”多選框時表頭的“表頭隱藏”多選框也會被取消選中;當列表中的兩個“隱藏”多選框,一個被選中,另外一個沒有被選中時表頭的“表頭隱藏”多選框會呈現第三種狀態,樣式本應該會是一條短橫線,但是在上圖中卻沒有顯示預期的效果,這是在safari瀏覽器的效果,但是在chrome瀏覽器中會表現預期的第三種狀態效果的。
4. 挖坑說明:
其實之初在新增這個功能的時候我是沒有新增slot-scope="scope"屬性,因為在開發工具中提示紅色的波浪形,表示
“[vue/no-unused-vars]
'scope' is defined but never used.eslint-plugin-vue
Peek Problem
No quick fixes available”,其實這只是eslint外掛的語法檢查,當時我就去掉了;此外,當時還沒有新增v-model="checkAll"屬性,只是新增@change事件響應,此此時操作介面時表頭多選框的狀態能夠正常切換;但是當我把v-model="checkAll"屬性新增後,操作介面時發現表頭的多選框的狀態只跟初始值checkAll有關,若checkAll初始值為false,那麼表頭的多選框就會一直是取消選中的狀態;若checkAll初始值為true,那麼表頭的多選框就會一直是選中的狀態。納悶了很久,最後我無意中新增上slot-scope="scope"這個屬性,操作介面,結果表頭的多選框能夠正常切換狀態了。這就是我給自己挖的一個坑,在這裡我對Vue中的插槽功能還不是很熟悉吧,需要補一補這方面的知識。不過,最後還是自己把這個坑給填上了。
5. 擴充
在自定義其它型別的表頭時可以參考上述流程,框架是類似的,千萬不要把插槽屬性省略了,否則的話會有奇怪的坑出現。
------20200112勉
閱讀是一種修養,分享是一種美德。
相關文章
- ElementUI 中 table 表格自定義表頭 Tooltip 文字提示UI
- elementUI table 自定義表頭UI
- 直播app原始碼,給elementUI的table表頭新增按鈕或者多選框APP原始碼UI
- elementUI radio修改單選框多選框選中樣式及自定義其他樣式。UI
- vue-table自定義表格Vue
- elementUI 2.0.11自定義表頭UI
- DedeCMS的checkbox多選欄位自定義取值的方法
- vue中elementUI的表格實現自定義編輯VueUI
- 基於ElementUI + Vue-Cli3.0 開發的表頭帶有多種篩選器表格元件(開發者可自定義篩選器)...UIVue元件
- 基於vue和elementUI封裝框選表格元件VueUI封裝元件
- vue - elementui 元件 表格 <el-table> 列頭修改背景顏色VueUI元件
- Swing 自定義JTable 多選框 自動選擇的錯誤
- C++ Qt開發:CheckBox多選框元件C++QT元件
- Flutter學習(8)——CheckBox多選框使用及動態更改多選框資料Flutter
- vue中使用Checkbox 多選框迴圈遍歷Vue
- ElementUI表格行編輯單元格編輯支援(輸入框,選擇框)DemoUI
- Flutter實現自定義篩選框Flutter
- vxe-table 多選、使用表格多選資料、核取方塊多選
- vue+elementUI el-table匯出excel表格VueUIExcel
- 自定義表格
- checkbox/radio自定義樣式
- 帶有多選和突出顯示關鍵字的自定義下拉選擇框(靜態)
- jQuery table表格行的新增和刪除jQuery
- Element-Plus表格:Table自定義合併行資料的最佳實踐
- JavaScript動態為table表格新增行JavaScript
- Flutter 自定義輸入框Selection選單和選擇器Flutter
- table表格細線且去掉外邊框效果
- Vue element下拉框加一個自定義的選項Vue
- table表格tr行點選高亮
- 自定義checkbox樣式(相容IE9)IE9
- Android自定義view之實現帶checkbox的SnackbarAndroidView
- antd 自定義展開表格
- Flutter自定義折線圖並新增點選事件Flutter事件
- JavaScript table表格行進行刪除和新增JavaScript
- jQuery DataTables新增自定義多個搜尋條件jQuery
- EMQX 多版本釋出、新增自定義函式功能MQ函式
- Css實現checkbox及radio樣式自定義CSS
- 新浪微部落格戶端(11)-自定義checkBox