Skip to content

Commit 1b128bc

Browse files
committed
tree组件
1 parent 0a74401 commit 1b128bc

File tree

4 files changed

+145
-1
lines changed

4 files changed

+145
-1
lines changed

src/components/HelloWorld.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@
77
<!-- <FormExample></FormExample> -->
88
<!-- 插槽 -->
99
<!-- <SlotExample></SlotExample> -->
10+
<!-- 递归 -->
11+
<TreeExample></TreeExample>
1012
</div>
1113
</template>
1214

1315
<script>
1416
import Communication from '@/components/communication';
1517
import FormExample from '@/components/form';
1618
import SlotExample from '@/components/slots';
19+
import TreeExample from '@/components/recursion';
1720
1821
export default {
1922
name: 'HelloWorld',
@@ -23,7 +26,8 @@ export default {
2326
components: {
2427
Communication,
2528
FormExample,
26-
SlotExample
29+
SlotExample,
30+
TreeExample
2731
},
2832
}
2933
</script>

src/components/recursion/Tree.vue

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<template>
2+
<div class="kkb-tree">
3+
<TreeNode v-for="item in data" :key="item.title" :model="item"></TreeNode>
4+
</div>
5+
</template>
6+
7+
<script>
8+
import TreeNode from "@/components/recursion/TreeNode.vue";
9+
export default {
10+
props: {
11+
data: {
12+
type: Array,
13+
required: true
14+
}
15+
},
16+
components: {
17+
TreeNode
18+
}
19+
};
20+
</script>
21+
22+
<style scoped>
23+
.kkb-tree {
24+
text-align: left;
25+
}
26+
</style>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<template>
2+
<div>
3+
<div @click="toggle" :style="{paddingLeft: (level-1)+'em'}">
4+
<label>{{model.title}}</label>
5+
<span v-if="isFolder">[{{open ? '-' : '+'}}]</span>
6+
</div>
7+
<div v-show="open" v-if="isFolder">
8+
<tree-node class="item" v-for="model in model.children"
9+
:model="model" :key="model.title"
10+
:level="level + 1"></tree-node>
11+
</div>
12+
</div>
13+
</template>
14+
15+
<script>
16+
export default {
17+
name: "tree-node",
18+
props: {
19+
model: Object,
20+
level: {
21+
type: Number,
22+
default: 1
23+
}
24+
},
25+
data: function() {
26+
return {
27+
open: false
28+
};
29+
},
30+
computed: {
31+
isFolder: function() {
32+
return this.model.children && this.model.children.length;
33+
}
34+
},
35+
methods: {
36+
toggle: function() {
37+
if (this.isFolder) {
38+
this.open = !this.open;
39+
}
40+
},
41+
}
42+
};
43+
</script>

src/components/recursion/index.vue

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<template>
2+
<Tree :data="treeData"></Tree>
3+
</template>
4+
5+
<script>
6+
import Tree from "@/components/recursion/Tree.vue";
7+
export default {
8+
data() {
9+
return {
10+
treeData: [
11+
{
12+
title: "Web全栈架构师",
13+
children: [
14+
{
15+
title: "Java架构师"
16+
},
17+
{
18+
title: "JS高级",
19+
children: [
20+
{
21+
title: "ES6"
22+
},
23+
{
24+
title: "动效"
25+
}
26+
]
27+
},
28+
{
29+
title: "Web全栈",
30+
children: [
31+
{
32+
title: "Vue训练营",
33+
expand: true,
34+
children: [
35+
{
36+
title: "组件化"
37+
},
38+
{
39+
title: "源码"
40+
},
41+
{
42+
title: "docker部署"
43+
}
44+
]
45+
},
46+
{
47+
title: "React",
48+
children: [
49+
{
50+
title: "JSX"
51+
},
52+
{
53+
title: "虚拟DOM"
54+
}
55+
]
56+
},
57+
{
58+
title: "Node"
59+
}
60+
]
61+
}
62+
]
63+
}
64+
]
65+
};
66+
},
67+
components: {
68+
Tree
69+
}
70+
};
71+
</script>

0 commit comments

Comments
 (0)