iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >基于Vue制作组织架构树组件
  • 670
分享到

基于Vue制作组织架构树组件

2024-04-02 19:04:59 670人浏览 薄情痞子
摘要

小编给大家分享一下基于Vue制作组织架构树组件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!由于公

小编给大家分享一下基于Vue制作组织架构树组件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

基于Vue制作组织架构树组件

由于公司业务需求,需要开发一个展示组织架构的树组件(公司的项目是基于Vue)。在GitHub上找了半天,这类组件不多,也没有符合业务需求的组件,所以决定自己造轮子!

分析

  • 既然是树,那么每个节点都应该是相同的组件

  • 节点下面套节点,所以节点组件应该是一个 递归组件

那么,问题来了。递归组件怎么写?

递归组件

Vue官方文档是这样说的:

组件在它的模板内可以递归地调用自己。不过,只有当它有 name 选项时才可以这么做

接下来,我们来写一个树节点递归组件:

<template>
 <div class="org-tree-node">
 <div class="org-tree-node-label">{{data.label}}</div>
  <div class="org-tree-node-children" v-if="data.children">
  <org-tree-node v-for="node in data.children" :data="node" :key="data.id"></org-tree-node>
 </div>
 </div>
</template>
<script>
 export default {
 name: 'OrgTreeNode',
 props: {
  data: Object
 }
 }
</script>
<style>
 
</style>

然后渲染这个这个组件,效果如下

基于Vue制作组织架构树组件 

至此,一个简单的组织架构树组件就完成了。

然而,事情还远远没有结束。。。

需求说:节点的label要支持定制,树要支持水平展示!

因此,我们对递归组件作如下修改:

<template>
 <div class="org-tree-node">
 <div class="org-tree-node-label">
  <slot>{{data.label}}</slot>
 </div> 
 <div class="org-tree-node-children" v-if="data.children">
  <org-tree-node v-for="node in data.children" :data="node" :key="data.id"></org-tree-node>
 </div>
 </div>
</template>
<script>
 export default {
 name: 'OrgTreeNode',
 props: {
  data: Object
 }
 }
</script>
<style>
 
</style>

我们使用slot插槽来支持label可定制,但是问题又来了:我们发现只有第一层级的节点label能定制,嵌套的子节点不能有效的传递slot插槽。上网查了半天,仍然没有结果,于是再看官方文档。发现有个函数式组件。由于之前使用过 element-ui 的 tree 组件,受到启发,就想到了可以像 element-ui 的 tree 组件一样传一个 renderContent 函数,由调用者自己渲染节点label,这样就达到了节点定制的目的!

函数式组件

接下来,我们将树节点模板组件改造成函数式组件。编写node.js

首先我们实现一个render函数

export const render = (h, context) => {
 const {props} = context
 return renderNode(h, props.data, context)
}

实现renderNode函数

export const renderNode = (h, data, context) => {
 const {props} = context
 const childNodes = []
 childNodes.push(renderLabel(h, data, context))
 if (props.data.children && props.data.children.length) {
 childNodes.push(renderChildren(h, props.data.children, context))
 }
 return h('div', {
 domProps: {
 className: 'org-tree-node'
 }
 }, childNodes)
}

实现renderLabel函数。节点label定制关键在这里:

export const renderLabel = (h, data, context) => {
 const {props} = context
 const renderContent = props.renderContent
 const childNodes = []
 // 节点label定制,由调用者传入的renderContent实现
 if (typeof renderContent === 'function') {
 let vnode = renderContent(h, props.data)
 vnode && childNodes.push(vnode)
 } else {
 childNodes.push(props.data.label)
 }
 return h('div', {
 domProps: {
 className: 'org-tree-node-label'
 }
 }, childNodes)
}

实现renderChildren函数。这里递归调用renderNode,实现了递归组件

export const renderChildren = (h, list, context) => {
 if (Array.isArray(list) && list.length) {
 const children = list.map(item => {
 return renderNode(h, item, context)
 })
 return h('div', {
 domProps: {
 className: 'org-tree-node-children'
 }
 }, children)
 }
 return ''
}

至此我们的render函数完成了,接下来使用render函数定义函数式组件。在tree组件里面声明:

<template>
 <!-- ... -->
</template>
<script>
 import render from './node.js'
 export default {
 name: 'OrgTree',
 components: {
  OrgTreeNode: {
  render,
  // 定义函数式组件
  functional: true
  }
 }
 }
</script>

至此我们的函数式组件改造完成了,至于水平显示用样式控制就可以了。

CSS样式

样式使用less预编译。节点之间的线条采用了 :before 、 :after 伪元素的 border 绘制

功能扩展

  • 添加了 labelClassName 属性,以支持对节点label的样式定制

  • 添加了 labelWidth 属性,用于限制节点label的宽度

  • 添加了 props 属性,参考 element-ui 的 tree 组件的props属性,以支持复杂的数据结构

  • 添加了 collapsable 属性,以支持子节点的展开和折叠(展开和折叠操作需调用者实现)

  • 刚开始采用了 flex 布局,但是要兼容IE9,后来改成了 display: table 布局

最终效果:

default

基于Vue制作组织架构树组件

horizontal

基于Vue制作组织架构树组件

问题总结

可以定义一个树的store,存储每个节点状态,这样就可以在内部维护树节点的展开可收起状态

以上是“基于Vue制作组织架构树组件”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: 基于Vue制作组织架构树组件

本文链接: https://www.lsjlt.com/news/66967.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Vue制作组织架构树组件
    小编给大家分享一下基于Vue制作组织架构树组件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!由于公...
    99+
    2024-04-02
  • Vue组织架构树图组件vue-org-tree的使用解析
    目录Vue组织架构树图组件vue-org-tree说明快速开始APIVue组织架构图组件vue-tree-chartVue组织架构树图组件vue-org-tree 说明 最近需要作出...
    99+
    2022-11-13
    Vue组织架构树图 Vue vue-org-tree vue 组件树
  • Vue之vue-tree-color组件实现组织架构图案例详解
    目录npm安装loaderImport Plugins开始排列方式折叠展示点击节点其他功能npm # use npm npm install vue-tree-color 安装...
    99+
    2024-04-02
  • Vue 组件组织结构及组件注册详情
    目录1、组件的组织2、组件名2.1 组件命名方式3、全局注册4、局部注册1、组件的组织 通常一个应用会以一棵嵌套的组件树的形式来组织: 例如:我们可能会有页头、侧边栏、内容区等组件...
    99+
    2024-04-02
  • vue开发树形结构组件(组件递归)
    本文实例为大家分享了vue开发树形结构组件的具体代码,供大家参考,具体内容如下 需求 一个页面,要显示商品分类,同时每个分类下面还拥有若干子类,子类也可以有子类。 要实现全选单选,子...
    99+
    2024-04-02
  • 基于DOM+CSS3如何实现OrgChart组织结构图插件
    这篇文章主要为大家展示了“基于DOM+CSS3如何实现OrgChart组织结构图插件 ”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于DOM+CSS3如何实现...
    99+
    2024-04-02
  • 揭开 VUE 组件在 MVVM 架构中的作用
    Vue 组件:MVVM 架构的基石 MVVM(Model-View-ViewModel)是一种流行的应用程序架构模式,Vue.js 框架正是基于此模式构建的。在 MVVM 架构中,Vue 组件扮演着不可或缺的角色。 Vue 组件本质上是...
    99+
    2024-02-28
    Vue、MVVM、组件、模块化、可维护性
  • vue递归组件实现树形结构
    本文实例为大家分享了vue递归组件实现树形结构,供大家参考,具体内容如下 一、递归组件 什么是递归组件?简单来说就是在组件中内使用组件本身。函数自己调用自己。很多情况下我们呢刷数据的...
    99+
    2024-04-02
  • DubboServiceMesh基础架构组件改造
    目录前言其他基础架构总结前言 公司的分布式架构是基于Alibaba Dubbo实现的,微服务的相关治理也是基于Alibaba Dubbo做的,随着公司系统规模的增长服务发布,服务的治...
    99+
    2023-03-02
    Dubbo Service Mesh组件改造 Dubbo Service Mesh
  • vue基于Teleport实现Modal组件
    目录1.认识Teleport2.Teleport的基本用法 3.第一步优化 4.第二步优化 5.实现Modal组件 1.认识Teleport 像我们如果写Modal组件、Messag...
    99+
    2024-04-02
  • 怎么在Word中快速制作组织结构图
    这篇文章主要为大家分析了怎么在Word中快速制作组织结构图的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“怎么在Word中快速制作组织结构图”的知识吧。使用W...
    99+
    2023-06-04
  • 前端架构vue动态组件使用基础教程
    目录1、基本使用2、配合 keep-alive 使用1、基本使用 新建组件 Article.vue <template> <div> ...
    99+
    2024-04-02
  • 基于Flutter实现风车加载组件的制作
    目录前言接口定义实现思路风车绘制旋转效果代码实现WindmillIndicator定义旋转速度设定风车叶片绘制风车组件运行效果总结前言 Flutter 官方提供了诸如 Circula...
    99+
    2024-04-02
  • Vue组件基础操作介绍
    目录一、组件二、组件的创建三、组件中的data四、组件中的methods一、组件 组件是vue的重要的特征之一,可以扩展html的功能,也可以封装代码实现重复使用。 二、组件的创建 ...
    99+
    2023-01-14
    Vue组件创建 Vue组件data Vue组件methods
  • vue基于Teleport如何实现Modal组件
    这篇文章将为大家详细讲解有关vue基于Teleport如何实现Modal组件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.认识Teleport像我们如果写Modal组件、Message组件、Loadi...
    99+
    2023-06-15
  • 如何基于Element组件改造树形选择器
    这篇文章将为大家详细讲解有关如何基于Element组件改造树形选择器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:由于做项目需要一个树形选择器,项目用的也是elem...
    99+
    2024-04-02
  • PostgreSQL的基本架构和组件是什么
    PostgreSQL的基本架构和组件如下: Query Processor:负责解析SQL查询语句并生成执行计划。 Pars...
    99+
    2024-04-02
  • 基于组件的机制的SimpleFramework工作原理是什么
    本篇文章给大家分享的是有关基于组件的机制的SimpleFramework工作原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。生命周期:了解SimpleFramework...
    99+
    2023-06-17
  • 基于Vue中点击组件外关闭组件的示例分析
    这篇文章主要为大家展示了“基于Vue中点击组件外关闭组件的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于Vue中点击组件外关闭组件的示例分析”这篇文...
    99+
    2024-04-02
  • 如何使用Vue递归组件构建树形菜单
    今天小编给大家分享一下如何使用Vue递归组件构建树形菜单的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在Vue.js中一个递...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作