vue自定义组件表格
时间: 2023-07-01 09:18:58 浏览: 188
好的,下面是一个简单的示例代码,可以帮助你自定义一个表格组件:
```vue
<template>
<table>
<thead>
<tr>
<th v-for="header in headers" :key="header">{{ header }}</th>
</tr>
</thead>
<tbody>
<tr v-for="(row, index) in rows" :key="index">
<td v-for="(item, key) in row" :key="key">{{ item }}</td>
</tr>
</tbody>
</table>
</template>
<script>
export default {
props: {
headers: {
type: Array,
required: true
},
rows: {
type: Array,
required: true
}
}
}
</script>
```
在这个组件中,我们使用了两个 props:headers 和 rows。headers 表示表格的表头,是一个字符串数组;rows 表示表格的数据行,是一个对象数组。在组件的模板中,我们使用了 v-for 指令来渲染表头和数据行。在表头中,我们使用了 v-for 和 :key 指令来循环渲染表头中的每一个单元格。在数据行中,我们使用了 v-for 和 :key 指令来循环渲染每一行中的每一个单元格。
你可以在父组件中使用这个组件来渲染一个自定义表格:
```vue
<template>
<div>
<my-table :headers="headers" :rows="rows"></my-table>
</div>
</template>
<script>
import MyTable from './MyTable.vue'
export default {
components: {
MyTable
},
data () {
return {
headers: ['Name', 'Age', 'Gender'],
rows: [
{ name: 'Alice', age: 25, gender: 'Female' },
{ name: 'Bob', age: 30, gender: 'Male' },
{ name: 'Charlie', age: 20, gender: 'Male' }
]
}
}
}
</script>
```
在这个父组件中,我们通过调用 MyTable 组件,并传入 headers 和 rows 两个 props 来渲染一个自定义表格。注意,父组件中的数据格式必须符合 MyTable 组件 props 的要求,即 headers 必须是一个字符串数组,rows 必须是一个对象数组。
阅读全文
相关推荐
















