如何返回html格式的单元格值?
我想使用 <el-table-column>
formatter
获取自定义格式的值(使用 html 或其他组件)。
<el-table :data="data">
<el-table-column v-for="(column, index) in columns"
:key="index" :label="column.label"
:formatter="column.formatter">
</el-table-column>
</el-table>
data() {
return {
columns: [
{
label: 'Created at',
formatter: (row, col, value, index) => {
return `<span class="date">${value}</span>`
}
},
// edit:
{
label: 'Address',
formatter: (row, col, value, index) => {
return `<mini-map :data="${row}"></mini-map>`
}
}
// other dynamic columns...
]
}
}
但是单元格内容显示为转义的 html 字符串。有没有可能强制html?
EPIC 编辑: 我添加了一个带有解决方案的答案。
原文由 Daniel 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的,经过几个小时的头脑风暴,我找到了非常好的解决方案。我把它放在这里是为了其他人 - 我希望这对某人有所帮助。
自定义列中显示的值可以是:
简单字符串(prop)
格式化字符串(安全,没有任何 html 或组件,通过原始格式化程序)
自定义值(html,组件,也安全!)
为了实现这一点,我必须创建自定义格式化程序组件,我将其放在文件夹中,即 /TableFormatters/
为此,有一个简单的功能组件 DatetimeFormatter 可以用图标显示日期时间。
TableFormatters/DatetimeFormatter.vue
这是列配置:
现在是定义
<el-table>
的时候了:这就像一个魅力。格式化程序在这里发生了什么?首先,我们检查格式化程序是否设置为
function
。如果是这样,本机<el-table-column>
格式化程序将控制,因为<template #default={row}>
将不会被创建。否则将创建格式化程序组件(通过:is
属性)。但是,如果没有格式化程序,将显示一行的普通值。