【问题标题】:Table with content distribution in Vue.js not being rendered properlyVue.js 中内容分布的表格未正确呈现
【发布时间】:2016-03-16 14:20:02
【问题描述】:

我正在尝试创建一个几乎只是一个表格的组件,并使用content distribution 在其中添加元素。

但由于某种原因,我的插槽元素呈现在表格之前,所以我可能做错了什么。

这是根应用程序模板:

<div id="app">
  <my-comp>
    <row-comp></row-comp>
    <row-comp></row-comp>
  </my-comp>
</div>

这些是我的组件声明:

new Vue({
  el: '#app',
  components: {
    'my-comp': {
      template: '\
        <table> \
          <thead> \
          <tr> \
            <th>header</th> \
          </tr> \
        </thead> \
        <tbody> \
          <tr> \
            <td>parent row</td> \
          <tr> \
          <slot></slot> \
        </tbody> \
      </table>'
    },

    'row-comp': {
      template: '<tr><td>content</td></tr>'
    }
  }
})

这里是 jsfiddle:https://jsfiddle.net/vxc0o3mf/

谢谢。

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    &lt;table&gt; 不能包含除&lt;tr&gt; 和其他特定于表格的元素以外的任何元素,因此在渲染时您的&lt;slot&gt; 会立即移出表格。这是一个很难解决的问题,基本上你必须使用具有is="component" 属性的合法表格元素来添加组件:

    <div id="app">
      <table>
        <thead is="header-comp"></thead>
        <tr is="row-comp"></tr>
      </table>
    </div>
    

    然后:

    new Vue({
        el: '#app',
      components: {
        'row-comp': {
            template: '<tr><td>content</td></tr>'
        },
        'header-comp': {
          template:'<thead><tr><th>header</th></tr></thead>'
        }
      }
    })
    

    小提琴:https://jsfiddle.net/vxc0o3mf/2/

    我知道这不具备您正在寻找的全部功能,但您不能将&lt;slot&gt; 与表格一起使用:(

    【讨论】:

    • 哦,这很有道理。在我看来,&lt;slot&gt;s 将被 &lt;tr&gt;s 取代,但这只会在 Vue.js 启动时发生,这为时已晚。谢谢@jeff
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2015-04-20
    • 2018-07-20
    • 1970-01-01
    • 2012-11-23
    • 2015-10-14
    相关资源
    最近更新 更多