vue递归实现图片上的多级菜单

在这里插入图片描述

父级组件结构

<template>
  <div>
    <detail-banner @show="showImgEvent"/>
    <detail-header />
    <common-gallary v-if="showImg" :imgs="imgs" @show="showImgEvent"/>
    <div class="container">
      <detail-list :list="list"/>
    </div>
  </div>
</template>

<script>
import DetailBanner from './components/Banner'
import DetailHeader from './components/Header'
import DetailList from './components/List'
import CommonGallary from 'common/gallary/Gallary'
export default {
  components: {
    DetailBanner,
    DetailHeader,
    CommonGallary,
    DetailList
  },
  data () {
    return {
      showImg: false,
      imgs: [
        'https://img1.qunarzz.com/p/tts3/1803/94/28d2b3bc42ef7402.jpg_r_1280x840x90_e87df2c9.jpg',
        'https://img1.qunarzz.com/p/tts1/1803/7a/22c09bdb85651202.jpg_r_1280x840x90_a62d44c2.jpg'
      ],
      list: [{
        title: '成人票',
        children: [{
          title: '成人三馆联票',
          children: [{
            title: '成人三馆联票 - 某一连锁店销售'
          }]
        }, {
          title: '成人五馆联票'
        }]
      }, {
        title: '学生票'
      }, {
        title: '儿童票'
      }, {
        title: '特惠票'
      }]
    }
  },
  methods: {
    showImgEvent (status) {
      this.showImg = status
    }
  }
}
</script>

<style lang="stylus" scoped></style>

列表子组件

<template>
<div>
  <div class="item" v-for="(item, index) of list" :key="index">
    <div class="itemTitle border-bottom">
      <span class="itemIcon"></span>
      {{ item.title }}
    </div>
    <!-- 当数据中有children属性时,对组件本身进行循环递归 -->
    <div v-if="item.children" class="itemChildren">
      <detail-list :list="item.children"/>
    </div>
  </div>
</div>
</template>

<script>
export default {
  name: 'DetailList',
  props: {
    list: Array
  }
}
</script>

<style scoped lang="stylus">
  .itemIcon
    display inline-block
    background-image url(//s.qunarzz.com/vacation_react/detail/better_product.png)
    background-size 100% 100%
    width 66px
    height 20px
    margin-right 10px
  .itemTitle
    line-height 80px
    font-size 32px
    padding 0 20px
  .itemChildren
    padding 0 20px
</style>

Logo

前往低代码交流专区

更多推荐