使用element-ui table expand展開行實現手風琴效果

寫這篇博客的初衷:官網演示效果爲點擊toggle,已經展開的項不會由於其餘項展開而關閉,因此延伸了下,擴展爲手風琴效果。git

根據留言反饋,新增了「修改操做欄文字」、「修改擴展欄內容」功能,完整代碼傳送門:https://github.com/Ele-Cat/element-expandgithub

效果前瞻:this

 

官網table expand地址:http://element-cn.eleme.io/#/zh-CN/component/table#zhan-kai-xingspa

先刪減一下代碼:code

 1 <template>
 2   <el-table ref="table" border stripe highlight-current-row :data="tableData5" style="width: 800px;">
 3     <el-table-column label="商品 ID" prop="id" width="100">
 4     </el-table-column>
 5     <el-table-column label="商品名稱" prop="name">
 6     </el-table-column>
 7     <el-table-column label="描述" prop="desc">
 8     </el-table-column>
 9     <el-table-column label="操做" width="100">
10       <template slot-scope="scope">
11         <el-button type="text" @click="toogleExpand(scope.row)">查看詳情</el-button>
12       </template>
13     </el-table-column>
14     <el-table-column type="expand" width="1">
15       <template slot-scope="props">
16         <el-form label-position="left" inline class="demo-table-expand">
17           <el-form-item label="商品名稱">
18             <span>{{ props.row.name }}</span>
19           </el-form-item>
20         </el-form>
21       </template>
22     </el-table-column>
23   </el-table>
24 </template>
25 
26 <script>
27 export default {
28   data() {
29     return {
30       tableData5: [{
31         id: '1',
32         name: '好滋好味雞蛋仔1',
33         desc: '荷蘭優質淡奶,奶香濃而不膩1',
34       }, {
35         id: '2',
36         name: '好滋好味雞蛋仔2',
37         desc: '荷蘭優質淡奶,奶香濃而不膩2',
38       }, {
39         id: '3',
40         name: '好滋好味雞蛋仔3',
41         desc: '荷蘭優質淡奶,奶香濃而不膩3',
42       }, {
43         id: '4',
44         name: '好滋好味雞蛋仔4',
45         desc: '荷蘭優質淡奶,奶香濃而不膩4',
46       }]
47     };
48   },
49   methods: {
50     toogleExpand(row) {
51       let $table = this.$refs.table;
52       $table.toggleRowExpansion(row)
53     }
54   }
55 }
56 </script>

後臺中,咱們通常會點擊按鈕去展開查看詳情,因此咱們替換箭頭爲「查看詳情」按鈕,經過toggleRowExpansion方法展開合閉expand。效果如圖:component

 

可是如今咱們尚未實現手風琴效果,修改methods→toogleExpand方法:orm

1 toogleExpand(row) {
2   let $table = this.$refs.table;
3   this.tableData5.map((item) => {
4     $table.toggleRowExpansion(item, false)
5   })
6   $table.toggleRowExpansion(row)
7 }

table的toggleRowExpansion方法能夠傳兩個參數,第一個參數傳row,第二個參數傳false,意思是合閉expand。咱們把每行的expand關閉一次,再把對應的行打開,這樣就實現了手風琴效果了。blog

新的問題,當咱們點擊打開了手風琴,每次都至少有一個是打開狀態的,這樣很明顯是bug了,咱們作一下讓已打開行的expand合閉。ip

bug緣由:當咱們點擊已打開的expand想關閉它時,至關於走了一遍$table.toggleRowExpansion(row, false)後,又走了一遍$table.toggleRowExpansion(row),因此這行的expand又被打開了。咱們把「合閉/打開「的expand對應的行去除「合閉「操做。element

修復toogleExpand方法:

1 toogleExpand(row) {
2   let $table = this.$refs.table;
3   this.tableData5.map((item) => {
4     if (row.id != item.id) {
5       $table.toggleRowExpansion(item, false)
6     }
7   })
8   $table.toggleRowExpansion(row)
9 }

需求結束。

後記:有時候,後臺需求會很紛繁複雜,咱們在使用別人造的輪子時要多研究多思考。

相關文章
相關標籤/搜索