你们都知道vue
只有for循环
,若是一层写一个循环,显然是没法实现未知层次的数据。
对于这个问题,官方的大神早就出了一个demo来实现递归,下面来剖析下它的原理
vue官方的treeview demo >>html
建立一个子项的组件,这个组件内调用当前组件,实现递归
HTML代码
<!-- 子级组件 --> <template id="item-template"> <li> <div> {{model.name}} </div> <!-- 组件中引用当前组件,传入下级数据 --> <ul> <item class="item" v-for="model in model.children" :model="model"> </item> </ul> </li> </template> <!-- 父级 --> <ul id="demo"> <item class="item" :model="treeData"> </item> </ul>
js代码
// demo数据 var data = { name: 'My Tree', children: [ { name: 'hello' }, { name: 'wat' }, { name: 'child folder', children: [ { name: 'child folder', children: [ { name: 'hello' }, { name: 'wat' } ] }, { name: 'hello' }, { name: 'wat' }, { name: 'child folder', children: [ { name: 'hello' }, { name: 'wat' } ] } ] } ] } // 定义子级组件 Vue.component('item', { template: '#item-template', props: { model: Object }, data: function () { return { } }, methods: { } }) var demo = new Vue({ el: '#demo', data: { treeData: data } })
阉割版代码 >>vue