【发布时间】:2020-04-21 22:14:41
【问题描述】:
我正在尝试更新我不久前为 Vue 项目编写的表格组件。我试图让用户使用插槽定义列。但是,这些插槽需要来自父组件的数据,我现在通过插槽范围提供这些数据。不幸的是,这会导致很多不必要的代码,因为来自 slot-scope 的属性只是通过 props 传递给子组件。我一直认为这可以以更好、更好的方式实现。您对下面的代码示例有什么建议吗?
VueTable.vue
<table>
<thead>
<tr>
<slot name="header" :sorting="sorting" :click-handler="clickHeader"></slot>
</tr>
</thead>
<tbody>
<tr v-for="let row of rows">
<slot name="row" :row="row"></slot>
</tr>
</tbody>
</table>
export default {
name: 'vue-table',
methods: {
..
clickHeader(..) {
..
},
..
}
}
Example.vue
<vue-table>
<template slot="header" slot-scope="{sorting, clickHandler}">
<vue-table-header :sorting="sorting" @click="clickHandler" label="Naam" identifier="title"></vue-table-header>
<vue-table-header :sorting="sorting" @click="clickHandler" label="Einddatum" identifier="end_date"></vue-table-header>
</template>
<template slot="row" slot-scope="{row}">
<vue-table-column :row="row" property="title"></vue-table-column>
<vue-table-column :row="row" property="description" type="custom">
This is a custom table column, which uses multiple properties: {{ row.id }} has a description of: {{ row.description }}
</vue-table-column>
<vue-table-column :row="row" property="end_date" type="date"></vue-table-column>
</template>
</vue-table>
vue-table-header 需要排序对象和 clickHandler 来显示哪一列被主动排序并更新它。
vue-table-column 可以访问行属性,以便能够访问其他属性,而不仅仅是定义为“属性”的属性。
我在上面的示例中遇到的问题是,对于每一列,我需要再次传递row。对于每个标题,我需要传递排序属性并单击处理程序来调整排序。我相信对此有更好的解决方案:)。
【问题讨论】:
标签: vue.js html-table vue-component vue-router