我想封装el-table 数据通过配置数组来渲染表格 然后el-table在父组件 循环 <el-table-column> 在子组件 但是这种会导致一些错误 有啥好的办法吗?
时间: 2023-10-14 21:12:22 浏览: 101
el-table无限滚动+控制列是否显示+列排序(非json)
5星 · 资源好评率100%
对于你的问题,我的建议是:在父组件中使用 `v-for` 循环来动态生成 `el-table-column`,并使用 `v-bind` 来绑定循环中的数据。然后将这些数据作为 props 传递给子组件,子组件中的 `el-table` 直接使用这些 props 来渲染表格即可。
具体实现步骤如下:
1. 在父组件中使用 `v-for` 循环来动态生成 `el-table-column`,并使用 `v-bind` 来绑定循环中的数据,例如:
```html
<el-table :data="tableData">
<el-table-column v-for="(column, index) in tableColumns" :key="index" :prop="column.prop" :label="column.label"></el-table-column>
</el-table>
```
其中 `tableData` 是表格数据,`tableColumns` 是一个配置数组,包含每列的属性信息。
2. 在父组件中将 `tableColumns` 数组作为 props 传递给子组件,例如:
```html
<template>
<div>
<table-render :columns="tableColumns" />
</div>
</template>
<script>
import TableRender from './TableRender.vue';
export default {
components: {
TableRender
},
data() {
return {
tableColumns: [
{ prop: 'name', label: '姓名' },
{ prop: 'age', label: '年龄' },
{ prop: 'gender', label: '性别' }
],
tableData: [
{ name: '张三', age: 18, gender: '男' },
{ name: '李四', age: 20, gender: '女' }
]
}
}
}
</script>
```
3. 在子组件中接收 `columns` props,并使用 `v-for` 循环来动态生成 `el-table-column`,例如:
```html
<template>
<el-table :data="tableData">
<el-table-column v-for="(column, index) in columns" :key="index" :prop="column.prop" :label="column.label"></el-table-column>
</el-table>
</template>
<script>
export default {
props: {
columns: {
type: Array,
required: true
}
},
data() {
return {
tableData: [
{ name: '张三', age: 18, gender: '男' },
{ name: '李四', age: 20, gender: '女' }
]
}
}
}
</script>
```
这样就可以避免在子组件中循环 `el-table-column` 导致的错误。
阅读全文