树结构的Vue组件
文件列表(压缩包大小 1.14M)
免费
概述
树结构的Vue组件。支持添加treenode / leafnode,编辑节点名称并拖动。
安装插件,然后就可以全局使用该组件了。
import Vue from 'vue'
import VueTreeList from 'vue-tree-list'
Vue.use(VueTreeList)
npm install vue-tree-list
<template>
<div>
<button @click="addNode">Add Node</button>
<vue-tree-list
@click="onClick"
@change-name="onChangeName"
@delete-node="onDel"
@add-node="onAddNode"
:model="data"
default-tree-node-name="new node"
default-leaf-node-name="new leaf"
v-bind:default-expanded="false"
>
<template v-slot:leafNameDisplay="slotProps">
<span>
{{ slotProps.model.name }} <span class="muted">#{{ slotProps.model.id }}</span>
</span>
</template>
<span class="icon" slot="addTreeNodeIcon">📂</span>
<span class="icon" slot="addLeafNodeIcon">+</span>
<span class="icon" slot="editNodeIcon">📃</span>
<span class="icon" slot="delNodeIcon">✂️</span>
<span class="icon" slot="leafNodeIcon">🍃</span>
<span class="icon" slot="treeNodeIcon">🌲</span>
</vue-tree-list>
<button @click="getNewTree">Get new tree</button>
<pre>
{{newTree}}
</pre>
</div>
</template>
<script>
import { VueTreeList, Tree, TreeNode } from 'vue-tree-list'
export default {
components: {
VueTreeList
},
data() {
return {
newTree: {},
data: new Tree([
{
name: 'Node 1',
id: 1,
pid: 0,
dragDisabled: true,
addTreeNodeDisabled: true,
addLeafNodeDisabled: true,
editNodeDisabled: true,
delNodeDisabled: true,
children: [
{
name: 'Node 1-2',
id: 2,
isLeaf: true,
pid: 1
}
]
},
{
name: 'Node 2',
id: 3,
pid: 0,
disabled: true
},
{
name: 'Node 3',
id: 4,
pid: 0
}
])
}
},
methods: {
onDel(node) {
console.log(node)
node.remove()
},
onChangeName(params) {
console.log(params)
},
onAddNode(params) {
console.log(params)
},
onClick(params) {
console.log(params)
},
addNode() {
var node = new TreeNode({ name: 'new node', isLeaf: false })
if (!this.data.children) this.data.children = []
this.data.addChildren(node)
},
getNewTree() {
var vm = this
function _dfs(oldNode) {
var newNode = {}
for (var k in oldNode) {
if (k !== 'children' && k !== 'parent') {
newNode[k] = oldNode[k]
}
}
if (oldNode.children && oldNode.children.length > 0) {
newNode.children = []
for (var i = 0, len = oldNode.children.length; i < len; i++) {
newNode.children.push(_dfs(oldNode.children[i]))
}
}
return newNode
}
vm.newTree = _dfs(vm.data)
}
}
}
</script>
<style lang="less" rel="stylesheet/less">
.vtl {
.vtl-drag-disabled {
background-color: #d0cfcf;
&:hover {
background-color: #d0cfcf;
}
}
.vtl-disabled {
background-color: #d0cfcf;
}
}
</style>
<style lang="less" rel="stylesheet/less" scoped>
.icon {
&:hover {
cursor: pointer;
}
}
.muted {
color: gray;
font-size: 80%;
}
</style>
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
模型 | TreeNode | - | 可以使用const head = new Tree([])生成TreeNode类型为head的树 |
默认树节点名称 | string | New node node | 新树节点的默认名称 |
默认叶子节点名称 | string | New leaf node | 新LeafNode的默认名称 |
默认扩展 | boolean | true | 树是否展开 |
该组件具有默认的图标addTreeNodeIcon,addLeafNodeIcon,editNodeIcon,delNodeIcon,leafNodeIcon,treeNodeIcon按钮,而且还可以自定义他们,并且可以访问model,root,expanded如下图所示:
< template v-slot:leafNameDisplay =“ slotProps ” >
< span > {{slotProps.model.name}}#{{slotProps.model.id}} </ span >
</ template >
< template v-slot:addTreeNodeIcon = “ slotProps ” >
< span class =“ icon ” > 📂 </ span >
</ template >
< template v-slot:addLeafNodeIcon =“ slotProps ”>
<span class =“ icon ” >+</ span >
</ template >
< template v-slot:editNodeIcon =“ slotProps ” >
< span class =“ icon ” > 📃 </ span >
</ template >
< template v-slot :delNodeIcon =“ slotProps ” >
< span class =“ icon ” >✂️ </ span >
</ template >
< template v-slot:leafNodeIcon =“ slotProps ” >
< span class =“ icon ” > 🍃 </ span >
</ template >
< template v-slot:treeNodeIcon =“ slotProps ” >
< span class =“图标“ >
{{(slotProps.model.children && slotProps.model.children.length > 0 &&!slotProps.expanded)吗?
'🌲':
</模板>
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)