Vue 之递归组件
Posted 架构师日刊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 之递归组件相关的知识,希望对你有一定的参考价值。
1、长期为你提供最优质的学习资源!
2、给你解决技术问题!
4、每周1、3、5送纸质书籍免费送给大家,每年至少送书800本书!
5、为大家推荐靠谱的就业单位!
请注意!我上面说的5点全部都是免费的!全网你应该找不到第二家吧!
当然,大家在我私人微信上问我问题,仅限回答web前端、java相关的。
---------------------------
好了,接下来开始今天的技术分享!上次老师跟大家分享了HTTPS 原理的知识,今天跟大家分享下Vue之递归组件的知识。
const root = {
text: 'Root Folder',
leaf: false,
expanded: true,
children: [{
text: 'Sub Folder 1',
leaf: false,
expanded: false,
children: [{
text: 'Sub Sub Folder 1',
leaf: false,
expanded: false,
children: [{
text: 'SomeFile1.js',
leaf: true
}]
{
text: 'Sub Sub Folder 2',
leaf: false,
expanded: false,
children: []
{
text: 'SomeFile.txt',
leaf: true
}]
}]
}
<template>
<ul class="folders">
<li>Folders</li>
<folder v-bind:folder="folder"></folder>
</ul>
</template>
import Folder from './Folder.vue';
export default {
name: 'root',
props: {
folder: Object
},
components: {
Folder
}
};
ul.folders {
padding: 1rem;
margin: 0;
box-sizing: border-box;
width: 100%;
list-style: none
}
ul.folders > li:first-child {
padding: 1rem 1rem 1rem 0
}
<template>
<li class="folder" v-bind:class="[folder.leaf ? 'is-leaf' : 'is-folder']">
<span v-on:click="expand()">{{ folder.text }}</span>
<ul class="sub-folders" v-if="folder.children && folder.children.length > 0" v-show="folder.expanded">
<folder v-for="child in folder.children" v-bind:folder="child"></folder>
</ul>
<div class="folder-empty" v-else v-show="!folder.leaf && folder.expanded">No Data</div>
</li>
</template>
export default {
name: "folder",
props: {
folder: Object
},
methods: {
expand() {
if (this.folder.leaf) {
return;
}
this.folder.expanded = !this.folder.expanded;
}
}
};
li.is-folder {
padding: 1rem;
border-left: 1px solid #d3d3d3;
margin-bottom: 0.5rem
}
li.is-folder > span {
padding: 0.5rem;
border: 1px solid #d3d3d3;
cursor: pointer;
display:inline-block
}
li.is-leaf {
padding: 0 0 0 1rem;
color: #000;
}
ul.sub-folders {
padding: 1rem 1rem 0 0;
margin: 0;
box-sizing: border-box;
width: 100%;
list-style: none
}
div.folder-empty {
padding: 1rem 1rem 0 1rem;
color: #000;
opacity: 0.5
}
<template>
<div class="vue-app">
<root v-bind:folder="root"></root>
</div>
</template>
import Root from './Root.vue';
export default {
name: 'app',
data: function () {
return {
root: {
text: 'Root Folder',
leaf: false,
expanded: true,
children: [{
text: 'Sub Folder 1',
leaf: false,
expanded: false,
children: [{
text: 'Sub Sub Folder 1',
leaf: false,
expanded: false,
children: [{
text: 'SomeFile1.js',
leaf: true
}]
}, {
text: 'Sub Sub Folder 2',
leaf: false,
expanded: false,
children: []
}, {
text: 'SomeFile.txt',
leaf: true
}]
}]
}
}
},
components: {
Root
}
};
![Vue 之递归组件](https://image.cha138.com/20210416/51d91d0ea86e413ba91072da84b7ed83.jpg)
以上是关于Vue 之递归组件的主要内容,如果未能解决你的问题,请参考以下文章