vs-tree: 移动端mobile-tree、PC端通用树组件,适用于通讯录组织树目录结构等

通用树组件Github:地址.

在这里插入图片描述

功能点

  • 基础树组件
  • 层级面包屑
  • 复选框
  • 单选框
  • 异步加载数据
  • 虚拟列表
  • 拖拽节点
  • 手风琴
  • 树内搜索
  • 自定义图标
  • 连接线
  • 最大可选
  • 节点右键事件
  • 自定义格式化数据
  • 支持Vue组件

DEMO

跳转到DEMO

安装

npm install vs-tree

yarn add vs-tree

用法

<div id="tree"></div>
import vsTree from 'vs-tree'
const tree = new vsTree('#tree', {
  data: { id: '1', name: 'zhangsan', children: [
    { id: '100', name: 'wangwu', children: []},
    { id: '101', name: 'zhaoliu', children: []},
    { id: '102', name: 'huahua'},
    { id: '103', name: 'oo-1'}]}
});

Vue use

// main.js
import { install } from './assets/vs-tree/vs-tree'
import './assets/vs-tree/vs-tree.css'

Vue.use(install)
<template>
  <div id="app">
    <vs-tree :data="data"></vs-tree>
  </div>
</template>

<script>
export default {
  name: 'App',
  data () {
    return {
      data: { id: '1', name: 'zhangsan', children: [
	    { id: '100', name: 'wangwu', children: []},
	    { id: '101', name: 'zhaoliu', children: []},
	    { id: '102', name: 'huahua'},
	    { id: '103', name: 'oo-1'}]}
    }
  },

}
</script>

Options

InputDescTypeDefault
el选择器, 或 HTMLElementstring 或 HTMLElement
data展示数据Object、 Array
async延时渲染Booleanfalse
hideRoot是否展示根节点Booleanfalse
showLine是否展示连接线Booleanfalse
showIcon是否显示图标Booleanfalse
onlyShowLeafIcon是否仅显示叶子节点图标Booleanfalse
showCheckbox是否显示复选框Booleanfalse
checkboxType父子节点关联关系ObjectcheckboxTypeOptions
checkInherit新加入节点时自动继承父节点选中状态Booleanfalse
showRadio是否显示单选框,会覆盖复选框Booleanfalse
radioType分组范围String‘all’
disabledInherit新加入节点时自动继承父节点禁用状态Booleanfalse
highlightCurrent是否高亮选中当前项Booleanfalse
accordion手风琴模式Booleanfalse
animation开启动画Booleanfalse
draggable开启拖拽Booleanfalse
dropable允许放置Booleanfalse
nocheckParent禁止父节点选中Booleanfalse
sort对选中列表排序Booleanfalse
checkOnClickNode是否在点击节点的时候选中节点Booleanfalse
lazy异步加载节点Booleanfalse
strictLeaf严格依赖isLeaf,不提供时如无子节点则不渲染展开图标Booleanfalse
max最大可选数量Number0
checkFilterLeaf选中结果过滤掉叶子节点, 异步加载时需手需提供 isLeafBooleanfalse
rootName根节点名称,仅 data 为数组时有效,此时不会默认Stringnull
expandClass展开收起图标classStringvs-expand-icon
theme皮肤风格,仅支持 ‘element’Stringnull
breadcrumb面包屑功能,只展示一层节点Objectnull
disabledKeys禁止操作Arraynull
checkedKeys默认选中Arraynull
expandKeys默认展开Arraynull
expandLevel默认展开级数, 0 不展开 -1 全部展开Number1
indent缩进Number10
virtual虚拟列表配置信息ObjectvirtualOptions

checkboxTypeOptions

optionsDesc默认
Y勾选后情况‘ps’
N取消勾选情况‘ps’

p 表示操作影响父节点
s 表示操作影响子节点

radioType

all 表示全局范围内分组
level 表示每级节点内分组

virtualOptions

optionsDesc默认
showCount试图内展示多少条数据30
itemHeight每条的高度26

breadcrumb

optionsDesc默认
elSelector, HtmlElement内部创建根节点
iconstring, ELement, Functionnull
linkstring, ELement, Functionnull
separatorstring, ELement, Functionnull
changeEventdom, node[], current

方法

Tree 内部使用了 Node 类型的对象来包装用户传入的数据,用来保存目前节点的状态。
Tree 拥有如下方法:

Methods说明参数
getCheckedNodes获取选中节点-
getNodeById根据 ID 获取 Node 节点id
setMaxValue设置最大可选number
scrollToIndex滚动到索引位置number
filter过滤节点keyword, onlySearchLeaf

onlySearchLeaf 只过滤叶子节点

Node 方法

Node 拥有如下方法:

Methods说明参数
setChecked设置是否选中true,false
setDisabled设置禁止操作true,false
remove删除当前节点-
append追加节点data

Events

事件名称说明回调参数返回值
click节点点击事件event, nodevoid
beforeCheck节点选择前触发nodetrue,false
check复选框被点击时触发event, nodevoid
change复选框改变时触发nodevoid
limitAlert超过 max 配置时触发-void
renderContent自定义节点内容h,nodeh()
loadlazy=true 时有效node, resolvevoid
checkFilter过滤掉的节点不计入统计nodetrue, false
format格式化数据data{name,children,isLeaf,icon}
contextmenu鼠标右键事件event, nodevoid
searchFilter搜索过滤keyword, node, datanode[]
searchRender搜索渲染node, cloneNodeElement
onDragstart开始拖拽e, nodevoid
onDragenter进入放置目标e, node, dragPosvoid
onDrop放置目标e, node, dragPosvoid

searchRender 返回的 Element 不会影响原有dom

renderContent

h: 生成简单 dom 节点,当前仅支持一下配置

renderContent: function (h, node) {
  return h("div", {
    className: "tree-action",
    children: [
      h("a", {
        text: 'append',
        click: function (e, node) {
          node.append({
            id: id++,
            name: 'append'
          })
        }
      }),
      h("a", {
        text: 'remove',
        click: function (e, node) {
          node.remove()
        }
      })
    ]
  })
}

load

resolve 异步加载完成后回调

lazy: true,
load: function (node, resolve) {
  setTimeout(() => {
    resolve([{
      id: id++,
      name: '新叶子节点' + id,
      isLeaf: true
    }])
  }, 1000)
}

format

目前仅支持,id, name、children、isLeaf、icon、extra

format: function(data) {
  return {
    name: data.title,
    children: data.child,
    isLeaf: !data.child,
    icon: 'custom-icon' || document.createElement
  }
}
  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
1. el-tree el-tree是Element UI组件库中的一种组件,使用非常方便。只需要在Vue组件中引入el-tree组件,然后传入相应的数据即可。 首先需要安装Element UI,可以使用npm命令进行安装: ``` npm install element-ui --save ``` 接着在Vue组件中引入el-tree组件: ``` <template> <el-tree :data="treeData"></el-tree> </template> <script> import { Tree } from 'element-ui' export default { components: { 'el-tree': Tree }, data() { return { treeData: [ { label: 'Node1', children: [ { label: 'Child1' }, { label: 'Child2' } ] }, { label: 'Node2' } ] } } } </script> ``` 以上代码中,el-tree的data属性传入了一个形数据结构,包含了两个节点Node1和Node2,Node1节点下有两个子节点Child1和Child2。 2. 自定义组件结构 如果想要自定义组件结构,可以使用Vue的插槽(slot)功能。插槽可以让父组件传入子组件的内容,让子组件可以自定义渲染。 首先,在Vue组件中定义一个自定义组件,并在其中使用插槽: ``` <template> <ul> <li v-for="item in treeData" :key="item.id"> <slot name="tree-node" :item="item"> <div>{{ item.label }}</div> </slot> <ul v-if="item.children"> <tree :tree-data="item.children"></tree> </ul> </li> </ul> </template> ``` 以上代码中,使用v-for循环渲染结构的每一个节点,使用插槽渲染节点的内容,插槽名为"tree-node",插槽传入了一个item属性,值为当前节点的数据。如果没有传入插槽,则默认渲染节点的label属性。 接着,在使用该自定义组件的父组件中,可以使用template标签来定义插槽的内容: ``` <template> <my-tree :tree-data="treeData"> <template v-slot:tree-node="{ item }"> <div> <span>{{ item.label }}</span> <button @click="editNode(item)">Edit</button> <button @click="deleteNode(item)">Delete</button> </div> </template> </my-tree> </template> <script> import MyTree from './MyTree.vue' export default { components: { 'my-tree': MyTree }, data() { return { treeData: [ { id: 1, label: 'Node1', children: [ { id: 2, label: 'Child1' }, { id: 3, label: 'Child2' } ] }, { id: 4, label: 'Node2' } ] } }, methods: { editNode(item) { console.log(`Edit node: ${item.label}`) }, deleteNode(item) { console.log(`Delete node: ${item.label}`) } } } </script> ``` 以上代码中,使用v-slot指令定义了一个名为"tree-node"的插槽,并在插槽中渲染了节点的内容,包括节点的label、编辑按钮和删除按钮。在父组件中使用自定义组件时,将插槽作为template标签的内容传入。在点击按钮时,可以调用父组件中的方法进行相应的操作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值