【发布时间】:2018-12-09 04:40:26
【问题描述】:
我正在尝试学习 VueJS。我还处于初级水平,所以请原谅任何误解。
我有一个.vue 文件,它呈现一个自定义表格元素。
<template>
<table v-bind:class="classes">
<slot></slot>
</table>
</template>
<script>
export default {
data() {
return {
styles: {
separator: 'separator',
solid: 'bg',
bg: 'bg'
}
};
},
props: {
type: { default: 'separator' },
theme: { default: 'primary' }
},
computed: {
classes: function () {
return `table m-table m-table--head-${this.styles[this.type]}-${this.theme}`;
}
}
}
</script>
在我试图创建模板的 HTML 文件中,它看起来像这样:
<custom-table type="solid" theme="primary">
<thead>
<tr>
<th>Column 1</th>
</tr>
</thead>
<tbody>
<tr>
<td>Value 1</td>
</tr>
</tbody>
</custom-table>
但是当页面渲染时,<slot>中的所有html都被剥离掉了,只剩下文字了:
如果我调用$vm0.$slots.defaults[0].elm,我得到的只是text,没有HTML,没有<thead> 等等。
我在网上搜索了vuejs2 stripping out html from slots,但找不到任何与为什么发生这种情况有关的信息。
我知道我的.vue 文件目前可能并不完美,我只是想了解一些基础知识。
感谢任何帮助,指出我为什么要剥离 HTML(或其他可能的内容)的正确方向。
【问题讨论】:
-
在这里推测,但您可能会遇到
<thead>和<tbody>元素作为无效内容被吊出,因为期望它们是包装它们的<table>。请参阅DOM Parsing Caveats 上的此部分。 -
好声音,我会试试它的建议 :) 谢谢!
-
@DigitalDrifter 答案已经发布,但您提供的链接也是一个有用的答案。如果您想将其发布为答案,我会很高兴地支持它:)
-
别担心,很高兴你把它整理好了。