后端(node简易版)接口数据:
//分类的接口
router.get('/api/goods/list', function (req, res, next) {
res.send({
code: 0,
data:
[
{
//一级
id: 0,
name: '推荐',
data: [
{
//二级
id: 0,
name: '推荐',
list: [
//三级
{
id: 0,
name: '铁观音',
imgUrl: './images/list1.jpeg'
},
{
id: 1,
name: '功夫茶具',
imgUrl: './images/list1.jpeg'
},
{
id: 2,
name: '茶具电器',
imgUrl: './images/list1.jpeg'
},
{
id: 3,
name: '紫砂壶',
imgUrl: './images/list1.jpeg'
},
{
id: 4,
name: '龙井',
imgUrl: './images/list1.jpeg'
},
{
id: 5,
name: '武夷岩茶',
imgUrl: './images/list1.jpeg'
},
]
}
]
},
{
//一级
id: 1,
name: '绿茶',
data: [
{
//二级
id: 1,
name: '绿茶',
list: [
//三级
{
id: 0,
name: '龙井绿茶',
imgUrl: './images/list1.jpeg'
},
{
id: 1,
name: '碧螺春',
imgUrl: './images/list1.jpeg'
},
{
id: 2,
name: '雀舌',
imgUrl: './images/list1.jpeg'
},
{
id: 3,
name: '安吉白茶',
imgUrl: './images/list1.jpeg'
},
{
id: 4,
name: '六安瓜片',
imgUrl: './images/list1.jpeg'
}
]
}
]
},
]
})
})
List.vue>
<section ref="wrapper">
<!-- 左边 -->
<div class="list-l">
<ul class="l-item">
<li class="active" v-for="(item, index) in leftData" :key="index">
{{ item.name }}
</li>
</ul>
</div>
<!-- 右边 -->
<div class="list-r">
<!-- 数据结构是三层数组嵌套 所以循环三次 -->
<ul v-for="(item, index) in rightData" :key="index">
<li v-for="(v, i) in item" :key="i">
<h2>{{ v.name }}</h2>
<ul class="r-content">
<li class="shop-list" v-for="(k, idx) in v.list" :key="idx">
<img :src="k.imgUrl" alt="" />
<span>{{ k.name }}</span>
</li>
</ul>
</li>
</ul>
</div>
</section>
import http from "@/common/api/request.js";
data() {
return {
leftData: [], //左侧数据
rightData: [], //右侧数据
};
},
async created() {
let res = await http.$axios({
url: "/api/goods/list",
});
let leftArr = [];
let rightArr = [];
//重构建数组再赋值 循环res:[{…}, {…}, {…}, {…}, {…}, {…}], 使leftArr每一项为一个对象
res.forEach((v) => {
leftArr.push({
id: v.id,
name: v.name,
});
rightArr.push(v.data);
});
console.log(leftArr); //[{id: 0, name: '推荐'}, {…}, {…}, {…}, {…}, {…}]
console.log(rightArr);
this.leftData = leftArr;
this.rightData = rightArr;
},