注意点:定义的columns一定要写在data中,否则在加载过程中由于渲染顺序会导致其中的渲染函数无法识别
渲染方法1:
指定渲染函数:
const columns = [
{
title: '排名',
dataIndex: 'key',
customRender: renderContent // 渲染函数的规则
}, {
title: '搜索关键词',
dataIndex: 'keyword',
customRender: (text, row, index) => {
if (index < 4) { // 前4行数据以a标签的形式被渲染
return <a href="javascript:;">{text}</a>
}
return { // 否则以独占4列的文本形式被渲染
children: text,
attrs: {
colSpan: 4
}
}
}
}
]
const renderContent = (value, row, index) => {
const obj = {
children: value,
attrs: {}
}
return obj
}
渲染方法2:
直接调用对应插槽模板:
<a-table :columns="columns" :dataSource="data" :pagination='pagination'>
<template slot="operation">
<a-select placeholder="选择操作" style="width: 100%" @change="listHandleChange">
<a-select-option value="1">项目进度</a-select-option>
<a-select-option value="2">质量管控</a-select-option>
<a-select-option value="3">运维监控</a-select-option>
</a-select>
</template>
<template slot='progress' slot-scope="text,record">
<span>{{text}}</span>
<span v-if='record.progressstatus'><a-icon class='arrow-up' type="arrow-up" /> </span>
<span v-if='!record.progressstatus'><a-icon class='arrow-down' type="arrow-down" /></span>
</template>
</a-table>
const columns = [
{
title: '编号',
dataIndex: 'number',
customRender: renderContent
}, {
title: '项目名称',
dataIndex: 'name',
customRender: (text, row, index) => {
return {
children: <a href="javascript:;">{text}</a>,
attrs: {}
}
}
}, {
title: '项目进度',
dataIndex: 'progress',
scopedSlots: { customRender: 'progress' } // 模板中对应的slot-scope可以用来传递参数,其中第一个参数是当前字段对应的值progress,第二个参数是当前字段对应的所有值对象,即整个data[n]
}, {
title: '操作',
dataIndex: 'operate',
scopedSlots: { customRender: 'operation' } // 直接对应插槽名为operation的模板
}
]
const data = [
{
key: 6,
number: 6,
name: '雅典娜',
progress: '88%',
progressstatus: 1
}
]