vue基礎(chǔ)之ElementUI表格詳解
ElementUI 表格
前置工作: 安裝好vue和elemetUI。如果是按需引入,請確保Table
、TableColumn
模塊已經(jīng)引入
示例:一個基本的表格
<template> <el-table :data="tableData" stripe="true" style="width: 100%"> <el-table-column prop="name" label="名稱"> </el-table-column> <el-table-column prop="todayBuy" label="日購買"> </el-table-column> <el-table-column prop="monthBuy" label="月購買"> </el-table-column> <el-table-column prop="totalBuy" label="總共購買"> </el-table-column> </el-table> </template> <script> export default { name:"home", data(){ return { tableData: [ { name: 'oppo', todayBuy: 500, monthBuy: 3500, totalBuy: 22000 }, { name: 'vivo', todayBuy: 300, monthBuy: 2200, totalBuy: 24000 }// ... ] } } } </script>
el-table的屬性
屬性 | 屬性值 | 說明 |
---|---|---|
stripe | bool | 是否使用斑馬紋 |
border | bool | 是否使用邊框 |
height | 數(shù)值 | 固定表頭。只要設(shè)置了屬性,就會自動固定表頭 |
max-height | 數(shù)值 | 位表格設(shè)置最大高度 |
el-table-column的屬性
屬性 | 屬性值 | 說明 |
---|---|---|
fixed | true(默認;左)|left|right | 固定欄,滾動的時候會浮動起來,可以選擇浮在哪一邊 |
如果我們希望通過行內(nèi)的一些屬性來對行做不同的顯示,那么我們可以給el-table
添加row-class-name
屬性。
row-class-name
屬性值是一個回調(diào)函數(shù)
// ... <script> export default { methods: { // 處理函數(shù) tableRowClassName({row, rowIndex}) { if (rowIndex === 1) { return 'warning-row'; } else if (rowIndex === 3) { return 'success-row'; } return ''; } } } </script> <style> .el-table .warning-row { background: oldlace; } .el-table .success-row { background: #f0f9eb; } </style>
多級表頭
通過<el-column>
嵌套實現(xiàn)多級表頭,數(shù)據(jù)更具prop
進行遍歷,看如下案例
<el-table :data="tableData" style="width: 100%"> <el-table-column prop="date" label="日期" width="150"> </el-table-column> <el-table-column label="配送信息"> <el-table-column prop="name" label="姓名" width="120"> </el-table-column> <!-- 地址沒有家prop屬性,所以不會對數(shù)據(jù)流影響 --> <el-table-column label="地址"> <el-table-column prop="province" label="省份" width="120"> </el-table-column> <el-table-column prop="city" label="市區(qū)" width="120"> </el-table-column> <el-table-column prop="address" label="地址" width="300"> </el-table-column> <el-table-column prop="zip" label="郵編" width="120"> </el-table-column> </el-table-column> </el-table-column> </el-table>
效果如下
獲取表格,重點說下?。。?/h3>
js中如何獲取表格?,通過給<el-table>
添加ref
屬性為表格做唯一標(biāo)識
<el-table highlight-current-row current-change="changerow" ref="signtable"> </el-table> // ... <script> // ... methods: { setCurrent(row) { // 通過this.$refs.<表格ref值> // 設(shè)置表格的的二行為選中 this.$refs.singleTable }, // ... </script>
單選
只需要配置
highlight-current-row
屬性即可實現(xiàn)單選。之后由current-change
事件來管理選中時觸發(fā)的事件,它會傳入currentRow
,oldCurrentRow
。如果需要顯示索引,可以增加一列el-table-column
,設(shè)置type
屬性為index
即可顯示從 1 開始的索引號
<el-table highlight-urrent-row current-change="changerow"> <el-column prop="name" label="姓名"></el-column> <el-column prop="address" label="地址"></el-column> <el-column prop="email" label="郵箱"></el-column> </el-table> <script> // ... methods: { setCurrent(row) { // 設(shè)置表格的的二行為選中 this.$refs.singleTable.setCurrentRow(1); }, // ... </script>
多選
手動添加一個<el-column>
屬性,添加type="selection"
,會調(diào)價一行多選按鈕
<template> <!-- 使用 selection-change監(jiān)聽選項改變,傳入一個函數(shù)名 --> <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%" @selection-change="handleSelectionChange"> <!-- type="selection" 生成多選 --> <el-table-column type="selection" width="55"> </el-table-column> <el-table-column label="日期" width="120"> <template slot-scope="scope">{{ scope.row.date }}</template> </el-table-column> <el-table-column prop="name" label="姓名" width="120"> </el-table-column> <el-table-column prop="address" label="地址" show-overflow-tooltip> </el-table-column> </el-table> </template> <script> // 選中某一行,清除選項 </script>
使用js選中
<script> // this.$refs.<表單標(biāo)識>.toggleRowSelection(row),row為tableData的一整行數(shù)據(jù) this.$refs.multipleTable.toggleRowSelection(row); // this.$refs.<表單標(biāo)識>.clearSelection();全不選 this.$refs.multipleTable.clearSelection(); </script>
排序
在表格中定義default-sort
定義默認
排序列和排序規(guī)則
通過給列添加srtotable
屬性賦予列排序功能
<template> <!-- 在表格中設(shè)設(shè)置默認排序規(guī)則 --> <el-table :default-sort="{prop:'todayBuy',order:'descending'}"> <el-table-column prop="name" label="名稱"> </el-table-column> <el-table-column prop="todayBuy" label="日購買"> </el-table-column> <el-table-column prop="monthBuy" label="月購買"> </el-table-column> <!-- 在表格中添加srottable屬性,會添加字段排序功能 --> <el-table-column srottable prop="totalBuy" label="總共購買" > </el-table-column> </el-table> </el-table> </template>
篩選
在列中定義:filters
屬性,值為一個[{ text: '', value: '' }]
的選項數(shù)組,提供給用戶篩選。同時,指定處理的回調(diào)函數(shù):filter-method
,值為函數(shù)名。有三個參數(shù),選中的值、遍歷時候的行、遍歷時候的列
<template> <!-- ... 設(shè)置選項和處理函數(shù)--> <el-table-column :filters="[{text:'300',value:'300'},{text:'800',value:'800'}]" :filter-method="handleFilter" prop="monthBuy" label="月購買"> </el-table-column> <!-- ... --> </template> <script> handleFilter(val,row){ return row.todayBuy == val } </script>
自定義列
一般我們會添加一個操作列,如刪除和編輯。那么我們可以不指定prop
屬性,然后為列添加其他內(nèi)容如下案例。同時,我們可以通過列上定義slot-scope="scope"
,通過scope
來獲取列和行。一下直接使用官網(wǎng)案例
<template> <el-table :data="tableData" style="width: 100%"> <el-table-column label="日期" width="180"> <!-- 定義slot-scope="scope"后就可在scope中獲取列和行數(shù)據(jù)了 --> <template slot-scope="scope"> <i class="el-icon-time"></i> <span style="margin-left: 10px">{{ scope.row.date }}</span> </template> </el-table-column> <el-table-column label="姓名" width="180"> <!-- 定義slot-scope="scope"后就可在scope中獲取列和行數(shù)據(jù)了 --> <template slot-scope="scope"> <el-popover trigger="hover" placement="top"> <p>姓名: {{ scope.row.name }}</p> <p>住址: {{ scope.row.address }}</p> <div slot="reference" class="name-wrapper"> <el-tag size="medium">{{ scope.row.name }}</el-tag> </div> </el-popover> </template> </el-table-column> <el-table-column label="操作"> <!-- 定義slot-scope="scope"后就可在scope中獲取列和行數(shù)據(jù)了 --> <template slot-scope="scope"> <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">編輯</el-button> <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">刪除</el-button> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [{ date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄' }, { date: '2016-05-04', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1517 弄' }, { date: '2016-05-01', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1519 弄' }, { date: '2016-05-03', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1516 弄' }] } }, methods: { // 按鈕的點擊函數(shù) handleEdit(index, row) { console.log(index, row); }, handleDelete(index, row) { console.log(index, row); } } } </script>
展開行
知識多又雜,一點點積累著,因為需求也是五花八門,用得上的。
在列(el-column
)中添加屬性 type="expand"
就可設(shè)置為展開行,展開的內(nèi)容定義在列標(biāo)簽內(nèi)。屬性的獲取同樣是通過slot-scope="scope"
詳情如下案例:
<template> <el-table :data="tableData"> <el-table-cloumn type="expand"> <template slot-scope="scope"> <el-card> <p>名稱:{{scope.row.name }}</p> <p>地址:{{scope.row.address }}</p> </el-card> </template> </el-table-cloumn> </el-table> </template> <script> export default { data() { return { tableData: [{ id: '12987125', name: '好滋好味雞蛋仔', category: '江浙小吃、小吃零食', desc: '荷蘭優(yōu)質(zhì)淡奶,奶香濃而不膩', address: '上海市普陀區(qū)真北路', shop: '王小虎夫妻店', shopId: '10333' }, { id: '12987126', name: '好滋好味雞蛋仔', category: '江浙小吃、小吃零食', desc: '荷蘭優(yōu)質(zhì)淡奶,奶香濃而不膩', address: '上海市普陀區(qū)真北路', shop: '王小虎夫妻店', shopId: '10333' }] } } } </script>
總結(jié)
本篇文章就到這里了,希望能給您帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
vue如何解決this.refs拿取v-for下元素undefine問題
這篇文章主要介紹了vue如何解決this.refs拿取v-for下元素undefine問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05vue使用html2canvas實現(xiàn)將DOM節(jié)點生成對應(yīng)的PDF
這篇文章主要為大家詳細介紹了vue如何使用html2canvas實現(xiàn)將DOM節(jié)點生成對應(yīng)的PDF,文中的示例代碼簡潔易懂,感興趣的小伙伴可以學(xué)習(xí)一下2023-08-08vue.js中Vue-router 2.0基礎(chǔ)實踐教程
這篇文章主要給大家介紹了關(guān)于vue.js中Vue-router 2.0基礎(chǔ)實踐的相關(guān)資料,其中包括vue-router 2.0的基礎(chǔ)用法、動態(tài)路由匹配、嵌套路由、編程式路由、命名路由以及命名視圖等相關(guān)知識,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05vue項目實現(xiàn)路由跳轉(zhuǎn)到新頁面,返回舊頁面,保留之前的數(shù)據(jù)記錄(操作代碼)
這篇文章主要介紹了vue項目實現(xiàn)路由跳轉(zhuǎn)到新頁面,返回舊頁面,保留之前的數(shù)據(jù)記錄,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09vue中v-for數(shù)據(jù)狀態(tài)值變了,但是視圖沒改變的解決方案
這篇文章主要介紹了vue中v-for數(shù)據(jù)狀態(tài)值變了,但是視圖沒改變的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06解決vue.js提交數(shù)組時出現(xiàn)數(shù)組下標(biāo)的問題
今天小編就為大家分享一篇解決vue.js提交數(shù)組時出現(xiàn)數(shù)組下標(biāo)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Vue?響應(yīng)式系統(tǒng)依賴收集過程原理解析
Vue 初始化時就會通過 Object.defineProperty 攔截屬性的 getter 和 setter ,為對象的每個值創(chuàng)建一個 dep 并用 Dep.addSub() 來存儲該屬性值的 watcher 列表,這篇文章主要介紹了Vue?響應(yīng)式系統(tǒng)依賴收集過程分析,需要的朋友可以參考下2022-06-06