如何在标准代码中添加自定义函数调用?例如。在DataTableTest.svelte中,我想添加cellFormatter函数并使其自动调用,并在中渲染div。以下是代码:
ABC.svelte
import DataTableTest from "./DataTableTest.svelte";
let columns = [
{
label: "ABC",
property: "abc"
},
{
label: "Items",
property: "items"
},
{
label: "cellFormatter",
formatter: function(rowIndex, rowData) {
return "<div>" + rowData[rowIndex] + "</div>";
}
}
];
let data = [
{
"abc": "dsaaads",
"items": "dsadsads",
}
</script>
<DataTableTest title="Test" {data} {columns} />
DataTableTest.svelte
<script>
export let title;
export let data;
export let columns = [];
</script>
{title}
<table>
{#if columns}
<tr>
{#each columns as c}
<td>{c.label}</td>
{/each}
</tr>
{/if}
{#if data}
<tbody>
{#each data as d, i}
<tr>
{#each columns as c}
{#if c.formatter}
<td on:load=c.formatter(i, d)></td>
{:else}
<td>
{@html d[c.property] ? d[c.property] : ''}
</td>
{/if}
{/each}
</tr>
{/each}
</tbody>
{/if}
</table>
我尝试了
<td on:load=c.formatter(i, d)></td>
但这行不通吗?有人可以告诉我该怎么做吗?
答案 0 :(得分:2)
您可以使用@html
template syntax来实现:
{#if c.formatter}
<td>
{@html c.formatter(i, d)}
</td>
{:else}
<td>
{@html d[c.property] ? d[c.property] : ''}
</td>
{/if}
答案 1 :(得分:0)
如@morphyish所述,您可以使用@html
模板语法将任意html插入DOM。
例如,如果您的表项的html是在运行时从API动态获取的,则非常有用-例如,当您的网络应用无法控制该html的生成时。
如果不是这种情况,并且您的网络应用可以控制生成html,那么我建议您使用<svelte:component>
{{3}来创建单独的组件并引用它们,而不是构造html字符串。渲染组件。这样,表中的所有内容实际上都是一个苗条的组件,而不是一些任意的html,您将获得苗条的所有优点。
以下是与此类似的示例:special element