商品分类(四)-填充右侧分类数据-右侧二三级商标渲染——通过computed计算属性,处理二三级菜单数据 & 短路运算-节省处理器运算时间 &有嵌套关系的遍历,key不能写同样的index,否则报错

右侧商标渲染——填充分类模板右侧数据-通过computed计算属性,处理二级和三级菜单数据 & 短路运算,节省处理器的运算时间 & 具有嵌套关系的遍历,:key不能写同样的index等命名,否则会报错

  • 右侧内容布局
  • 右侧数据填充
<div class="right">
  <!-- 右侧分类信息 -->
  <div :key='item.cat_id' v-for='item in rightData' class="brand-item">
    <div class="brand-title">
      {{item.cat_name}}
    </div>
    <div class="brand-list">
      <div :key='i' v-for='(brand,i) in item.children' class="brand">
        <img :src="brand.cat_icon">
        <p>{{brand.cat_name}}</p>
      </div>
    </div>
  </div>
</div>
实例

右侧二级菜单-分类和三级菜单条目

二级菜单数据1

在这里插入图片描述

二级菜单数据2

在这里插入图片描述

二级菜单数据3

在这里插入图片描述

二级菜单数据4-三级菜单条目

在这里插入图片描述

二级和三级菜单展示

在这里插入图片描述

通过computed计算属性,处理二级和三级菜单数据,根据左侧id拿到右侧第一项数据
短路运算,节省处理器的运算时间

代码

export default {
  data () {
    return {
      currentId: 1,
      cate: []
    }
  },
  computed: {
    // 如果data中的数据发生变化,那么计算属性会重新计算结果
    // 计算属性会基于之前的计算结果进行缓存(如果计算属性依赖的data发生变化,那么计算属性就会重新计算)
    rightData: function () {
      // 从全部数据中获取当前一级分类对应的右侧数据
      let data = this.cate.filter(item => {
        return item.cat_id === this.currentId
      })
      // 数组中必须有数据,才能获取对应的子属性
      let rlist = data.length > 0 && data[0].children
      return rlist
    }
  },
}

在这里插入图片描述

情况一:遍历二级菜单,不加:key

在这里插入图片描述

二级菜单遍历,显示效果

在这里插入图片描述

情况二:遍历二级菜单,加:key; 正常写法

在这里插入图片描述

二级菜单遍历,显示效果

在这里插入图片描述

三级菜单数据

在这里插入图片描述

情况一:三级菜单结构

在这里插入图片描述

三级菜单静态图

在这里插入图片描述

情况二:动态获取三级菜单数据

在这里插入图片描述

注意:key同为index索引会报错

具有嵌套关系的遍历,:key不能写同样的index等命名,否则会报错

在这里插入图片描述

三级菜单动态图

在这里插入图片描述

右侧二级和三级菜单-重点样式

  .right {
    flex: 1;
    height: 100%;
    overflow: auto;
    .brand-item {
      .brand-title {
        text-align: center;
        line-height: 2;
      }
      .brand-list {
        display: flex;
        flex-wrap: wrap;
        .brand {
          width: 33.33%;
          padding: 20rpx;
          box-sizing: border-box;
          img {
            width: 100%;
            height: 100rpx;
          }
          p {
            line-height: 1.5;
            font-size: 14px;
            text-align: center;
          }
        }
      }
    }
  }

一、二、三级菜单完整动态结构

  <div>
    <!-- 搜索栏 -->
    <search-bar></search-bar>
    <div class="content">
      <!-- 左侧一级分类 -->
      <div class="left" @click='handleChange'>
        <div :data-id='item.cat_id' :key='item.cat_id' v-for='item in cate' :class="['menu-item', {active: currentId === item.cat_id}]">
          {{item.cat_name}}
        </div>
      </div>
      <!-- 右侧二级和三级分类 -->
      <div class="right">
        <div :key='item.cat_id' v-for='item in rightData' class="brand-item">
          <!-- 二级分类的标题 -->
          <div class="brand-title">{{item.cat_name}}</div>
          <!-- 三级分类 -->
          <div class="brand-list">
            <!-- 每一个三级品牌 -->
            <div :key='i' v-for='(brand, i) in item.children' class="brand">
              <img :src="brand.cat_icon">
              <p>{{brand.cat_name}}</p>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值