在模仿尚硅谷的《谷粒商城》前端项目的效果时,遇到了一个多级表头的问题
我想要的效果是
我的数组是
skuList=[{"skuName":"","attr":[{"attrId":"1","attrName":"机身颜色","attrValue":"zz"},{"attrId":"3","attrName":"版本","attrValue":"11"}]},{"skuName":"","attr":[{"attrId":"1","attrName":"机身颜色","attrValue":"aa"},{"attrId":"3","attrName":"版本","attrValue":"11"}]},{"skuName":"","attr":[{"attrId":"1","attrName":"机身颜色","attrValue":"qq"},{"attrId":"3","attrName":"版本","attrValue":"11"}]},{"skuName":"","attr":[{"attrId":"1","attrName":"机身颜色","attrValue":"zz"},{"attrId":"3","attrName":"版本","attrValue":"22"}]},{"skuName":"","attr":[{"attrId":"1","attrName":"机身颜色","attrValue":"aa"},{"attrId":"3","attrName":"版本","attrValue":"22"}]},{"skuName":"","attr":[{"attrId":"1","attrName":"机身颜色","attrValue":"qq"},{"attrId":"3","attrName":"版本","attrValue":"22"}]}]
我的表格使用
<el-table :data="skuList" style="width: 100%">
<el-table-column label="属性组合">
<el-table-column
v-for="(item,index) in skuList[0].attr"
:key="index"
:label="item.attrName" :prop="item.attrValue">
</el-table-column>
</el-table-column>
<el-table-column prop="skuName" label="商品名称" width="180"/>
<--这后面的还没有写-->
<el-table-column prop="address" label="标题"/>
<el-table-column prop="address" label="副标题"/>
<el-table-column prop="address" label="价格"/>
</el-table>
但是表头是渲染出来了,但是数据却没有渲染出来。不知道怎么做,希望能够有人解惑
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
看起来你的数据没有渲染出来的问题可能在于你的 prop 属性的设置。在你的代码中,你试图通过 :prop="item.attrValue" 来访问数据,然而在你的 skuList 数组中,attrValue 是属性的值,而不是数据的键。
你需要将 attrValue 的值作为数据对象的键,这样才能在表格中正确显示数据。你可能需要调整你的数据结构以便将 attrValue 的值作为键,或者你可以创建一个方法来在你的数据中查找对应的值。
另外,你需要在 el-table-column 组件中使用 v-for 指令来循环渲染你的属性列,而不是在 el-table-column 内部再嵌套一个 el-table-column。这是因为 el-table-column 组件不支持嵌套。
这是一个基本的示例,你可以根据自己的需要进行调整:
<el-table :data="skuList" style="width: 100%">
<el-table-column v-for="(attr, index) in skuList[0].attr" :key="index" :label="attr.attrName">
<template slot-scope="scope">
{{ scope.row.attr.find(a => a.attrId === attr.attrId).attrValue }}
</template>
</el-table-column>
<el-table-column prop="skuName" label="商品名称" width="180"/>
<!-- 这后面的还没有写 -->
<el-table-column prop="address" label="标题"/>
<el-table-column prop="address" label="副标题"/>
<el-table-column prop="address" label="价格"/>
</el-table>
在这个示例中,使用了 slot-scope 来访问当前行的数据,并找到了与当前属性对应的值。注意,这个示例假设你的每个 sku 都有相同的属性顺序和数量。如果你的数据有不同的属性顺序或数量,你可能需要更复杂的逻辑来处理这种情况。
多级表头一般是通过嵌套的 组件实现的。您可以参考 element-plus 的官方文档中关于表格的多级表头示例:https://element-plus.eleme.cn/#/zh-CN/component/table#multiple-table-header
import { defineComponent } from 'vue';
export default defineComponent({
components: {
ElTable,
ElTableColumn,
},
// ...
});
CopyCopy
CopyCopy
这种复杂的表格数据渲染优先自定义模板实现,而不是使用prop属性绑定
<el-table :data="skuList" style="width: 100%">
<el-table-column label="属性组合">
<el-table-column v-for="(item, index) in skuList[0].attr" :key="index"
:label="item.attrName">
<template #default="scope">
<span>{{scope.row.attr[index].attrValue}}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="skuName" label="商品名称" width="180"/>
<el-table-column prop="address" label="标题"/>
<el-table-column prop="address" label="副标题"/>
<el-table-column prop="address" label="价格"/>
</el-table>
可以实现效果