重复表行中的vuejs - <slot>

时间:2016-08-16 08:56:06

标签: javascript components vue.js vue-component

我正在使用此解决方案动态设置vuejs组件中的表格单元格:

pyramid of doom

这适用于Vue.js v1.0.10,但不适用于当前版本v1.0.26。

Jsfiddle:http://forum.vuejs.org/topic/526/repeating-table-row-with-slot

我正在尝试获取以下标记(项目对象应该在组件中可用)

<div id="vue">
    <basic-table>
        <table-cell>{{ item.id }}</table-cell>
        <table-cell>{{ item.title }}</table-cell>
    </basic-table>
</div>

Vue.js组件(更多的是小提琴)

Vue.component('basic-table', {
    template: '<table><tbody><tr v-for="item in collection" v-slot></tr></tbody></table>',
    data: function () {
        return {
            collection: [
                {id: 1, title: 'Vue'},
                {id: 2, title: 'Vue 2'},
                {id: 3, title: 'Vue 3'},
                {id: 4, title: 'Vue 4'},
            ]
        }
    }
});

任何人都知道如何解决这个问题?

修改 Didnt找到了一个有效的解决方案 - 仍在搜索..

2 个答案:

答案 0 :(得分:3)

很难找出究竟出了什么问题,但是自 v1.0.18 以来该代码已被破坏。我无法深入挖掘以消除确切的提交,但有一些优化可能会影响$context._content渲染。

解决方案

但是,您可以通过更改

来解决问题
var raw = host.$options._content; 

var raw = host._context._directives.filter(function (value) {
    return !(value.Component === undefined);
})[0].el;

该更改与 v1.0.26 兼容。您可以找到固定代码here

声明

我找不到使用公共API实现相同结果的方法。所以这个解决方案也依赖于非公共API,因此可能会在将来的版本中破解。

答案 1 :(得分:2)

Aaron,我的回答可能不满意你的问题,但是为什么你不能像下面的代码那样简单,但你必须使用指令和所有这些东西?

我仍然在想为什么你的解决方案适用于以前的版本,而不是当前版本。 :D

&#13;
&#13;
new Vue({
  el: '#vue',
  data: {
    items: [{
      id: 1,
      title: 'Vue'
    }, {
      id: 2,
      title: 'Vue 2'
    }, {
      id: 3,
      title: 'Vue 3'
    }, {
      id: 4,
      title: 'Vue 4'
    }, ]
  }
});
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<table border="1" class="table" id="vue">
  <tbody>
    <tr v-for="item in items">
      <td>{{item.id}}</td>
      <td>{{item.title}}</td>
    </tr>
  </tbody>
</table>
&#13;
&#13;
&#13;