插槽在 Vue2 中的某个子元素之后停止

Slot stops after certain child element in Vue2

我有两个简单的 vue 组件,想在另一个的默认插槽中使用一个。由于某种原因,它只需要第一个元素,但之后不显示任何内容。如果我把 standard 放在第一个元素之前它会正常显示,但是如果我把 if 放在后面它也不会显示。

页面:

<div id="app">
    <v-app>
        <v-main>
            <gantt-chart>
                <div> this is visible </div>
                <gantt-row key="1" title="test 1"/> 
                <div> nothing of this and beyond is shown</div>
                <gantt-row key="2" title="test 2"/> 
                <gantt-row key="3" title="test 3"/> 
            </gantt-chart>
        </v-main>
    </v-app>
</div>
<script type="text/javascript">
    Vue.component("gantt-chart", httpVueLoader('/plugin_assets/javascripts/components/GanttChart.vue'));
    Vue.component("gantt-row", httpVueLoader('/plugin_assets/javascripts/components/GanttRow.vue'));
    var app = new Vue({
        el: '#app',
    })
</script> 

甘特图-chart.vue:

<template>
    <div>
      <slot />
    </div>
</template>

<script>
module.exports = {
  props: [],
  name:"GanttChart",
  data() {
    return {};
  },
  computed: {},
  methods: {},
};
</script>

<style scoped></style>

甘特图-row.vue:

<template>
    <div>
      {{ title }}
    </div>
</template>

<script>
module.exports = {
  props: ["title"],
  name:"GanttRow",
  data() {
    return {};
  },
  computed: {},
  methods: {},
};
</script>

<style scoped></style>

结果:

in-DOM 模板的警告之一是自定义元素不能 self-closing。 DOM 解析器看到 <gantt-row />,但仅将其视为开始标记。由于标签在技术上尚未关闭,因此它将以下元素包装为子元素。 GanttRow.vue 的模板没有 <slot>,因此嵌套元素将不可见。这一切都发生在 之前 脚本阶段(在 Vue 收到用于模板处理的 DOM 之前)。

例如,运行下面的代码片段,并检查生成的文档:

<div> this is visible </div>
<gantt-row key="1" title="test 1"/>
<div> nothing of this and beyond is shown</div>
<gantt-row key="2" title="test 2"/>
<gantt-row key="3" title="test 3"/>

您会注意到它变成了:

<div> this is visible </div>
<gantt-row key="1" title="test 1">
  <div> nothing of this and beyond is shown</div>
  <gantt-row key="2" title="test 2">
    <gantt-row key="3" title="test 3">
      <script type="text/javascript"></script>
    </gantt-row>
  </gantt-row>
</gantt-row>

如果您希望继续使用 in-DOM 模板,请为 Vue 组件使用正常的结束标记:

<gantt-chart>
  <div> this is visible </div>           
  <gantt-row key="1" title="test 1"></gantt-row>
  <div> everything below is also shown now </div>
                                         
  <gantt-row key="2" title="test 2"></gantt-row>
                                         
  <gantt-row key="3" title="test 3"></gantt-row>
</gantt-chart>