vue的遞歸組件以及三級菜單的製做

js裏面有遞歸算法,同時,咱們也能夠利用props來實現vue模板的遞歸調用,可是前提是組件擁有 name 屬性html

父組件:slotDemo.vue:vue

<template>
  <div>
    <!-----遞歸組件----->
    <ul>
      <simple3 :tree="item" v-for="item in tree"></simple3>
    </ul>

  </div>
</template>
<style lang="stylus" rel="stylesheet/stylus">
  li
   padding-left 30px
</style>
<script>
  import simple3 from "./simple/simple3.vue";
  export default{
    data(){
      return {
        tree: [{
          label: "一級菜單",
          test:1,
          children: [{
            label: "二級菜單",
            test:2,
            children: [{
              label: "三級菜單",
              test:3
            }]
          }]
        }]
      }
    },

    components: {
     
      simple3
    }
  }
</script>

  子組件:simple3.vue算法

<template>
  <li>
    <a>{{tree.label}}</a>
    <simple3 v-if="tree.children" :tree="item" v-for="item in tree.children" :class="item.test==2?'test2':'test3'"></simple3>

  </li>
</template>
<style rel="stylesheet/stylus" lang="stylus">
    .test2
      list-style disc

    .test3
      list-style decimal
</style>
<script>
  export default{
    name: "simple3",
    props: ["tree"]
  }
</script>

  

上面是一個子組件,定義了 name 爲 simple03,而後在模板中調用自身,結合 v-for 實現遞歸component

爲了防止出現死循環,在調用自身的時候,加入了 v-if 做爲斷定條件htm

父組件中調用的時候,須要經過 props 傳入一個 tree;blog

爲了對每一級菜單有所區分,我對tree裏面的每個子集合裏面加了一個test字段來區分是哪一級的菜單而後對其不一樣的樣式進行處理遞歸

最後的效果:ip

相關文章
相關標籤/搜索