We know that many systems require various tags to be added to the table to mark some attributes. Adding tags in element-ui is very simple. The most important thing is to use the slot feature of vue. First understand what a slot is.
Save the official complicated explanation and code. The meaning of slot is simply to leave a placeholder somewhere in the sub-component. , when the parent component uses this child component, you can customize the appearance of the placeholder, which may be a title, a button, or even a table or a form.
Why do we need slots? The reason why we extracted components is because there is too much reusable code. When using reusable components, copying and pasting is greatly reduced. Imagine there are two components. Most of them are the same, except for one part. At this time, there is no need to repeat other parts for this place. When we have the slot, we can extract the common parts of the two components, and then replace the different part with a slot. When calling later, we can only write the code for this part. This is in line with our componentization thinking and saves a lot of work.
In, use slot-scope
to get the current row information
<template slot-scope="scope" ></template>
scope.$index
Get the indexscope.row
Get the current row (object)In the table data, add tag:true
to an attribute where the label is to be rendered. When looping <el-table-column>
, the setting is encountered If you set the tag
attribute, you will enter this slot. You can customize the content to be presented in the tag column by calling the parent component of this component.
<p class="table-content"> <el-table :data="list" class="mt-10" fit stripe empty-text="暂无数据" :highlight-current-row="true" > <el-table-column v-for="(item, index) in table_title" :key="index" :prop="item.prop" :label="item.label" :width="item.width?item.width:null" :min-width="item.minwidth?item.minwidth:null" :sortable="item.sortable?item.sortable:false" :align="item.columnAlign" :header-align="item.titleAlign" > <template slot-scope="scope"> <template v-if="item.tag"> <slot name="tags" :scope="scope.row"></slot> </template> <span v-else>{{scope.row[item.prop]}}</span> </template> </el-table-column> </el-table> </p>
How to loop<el-table>
The content and title are as shown in the above code
<table-page :list="listData" :table_title="table_title"> <template v-slot:tags="scope"> <el-tag v-if="scope.scope.tag == 1" size="small" type="primary" >tag1 </el-tag> <el-tag v-else-if="scope.scope.tag == 2" size="small" type="warning" >tag2 </el-tag> <el-tag v-else-if="scope.scope.tag == 3" size="small" type="success" >tag3 </el-tag> </template> </table-page>
table_title
[ { prop: 'id', label: '编号', width: '100', titleAlign: 'center', columnAlign: 'center', sortable:true }, { prop: 'date', label: '日期', width: '150', titleAlign: 'center', columnAlign: 'center', sortable:true }, { prop: 'name', label: '姓名', width: '120', titleAlign: 'center', columnAlign: 'center', sortable:true }, { prop: 'province', label: '省份', minwidth: '120', titleAlign: 'center', columnAlign: 'center', sortable:true, isEdit: true }, { prop: 'city', label: '市区', minwidth: '120', titleAlign: 'center', columnAlign: 'center', sortable:true }, { prop: 'address', label: '地址', minwidth: '300', titleAlign: 'center', columnAlign: 'center', sortable:true }, { prop: 'auditflag', label: '状态', minwidth: '80px', tag: true, titleAlign: 'center', columnAlign: 'center', sortable:true }, ];
listData
[ { id: 1, date: '2016-05-02', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1518 弄', zip: 200333, tag: "1" }, { id: 2, date: '2016-05-04', name: '王小', province: '北京', city: '普陀区', address: '上海市普陀区金沙江路 1517 弄', zip: 200333, tag: "2" }, { id: 3, date: '2016-05-01', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1519 弄', zip: 200333, tag: "3" }, { id: 4, date: '2016-05-03', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1516 弄', zip: 200333, tag: "1" }, { id: 5, date: '2016-05-03', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1516 弄', zip: 200333, tag: "2" }, { id: 6, date: '2016-05-03', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1516 弄', zip: 200333, tag: "3" }, { id: 7, date: '2016-05-03', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1516 弄', zip: 200333, tag: "1" }, { id: 8, date: '2016-05-03', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1516 弄', zip: 200333, tag: "2" }, { id: 9, date: '2016-05-03', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1516 弄', zip: 200333, tag: "3" }, { id: 10, date: '2016-05-03', name: '王小虎', province: '上海', city: '普陀区', address: '上海市普陀区金沙江路 1516 弄', zip: 200333, tag: "1" } ],复制代码
This is the last column Son!
Recommended tutorial: "JS Tutorial"
The above is the detailed content of vue+element-ui table encapsulation tag uses slot slot tag. For more information, please follow other related articles on the PHP Chinese website!