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