这篇博客主要介绍树形控件的两个小小的功能:

下拉菜单

输入过滤框

以CSS样式为主,也会涉及到Vue组件和element组件的使用。

对于没有层级的数据,我们可以使用表格或卡片来展示。要展示或建立层级关系,就一定会用到树形组件了。

使用Vue + Element UI,构建出最基本的树如下图所示:

现在我们就要在这个基础上进行改造,使页面更加符合我们的交互场景。

下拉菜单

将下拉菜单嵌到树节点中,使操作更加简便、紧凑。

效果演示

效果如图:

图示1:悬浮在树节点状态

图示2:点击三个点图标状态

图示3: 选中并选择菜单

如上,当鼠标悬浮在树节点上时,出现竖着的三个小点,点击时弹出下拉菜单,显示可以对树节点进行的操作。

实现步骤

1、使用插槽(slot) + 子组件

父组件(含有树形控件)模板代码

:highlight-current="true" :check-on-click-node="true" >

{{ node.label }}

2、 DotDropdown 下拉框代码

很多树形结构都会使用该下拉框,所以定义组件,方便复用。

{{item.label}}

export default {

props: {

events: {

type: Array,

default: function() {

return [

{

label: '新建同级',

funcName: 'addNode'

},

{

label: '编辑',

funcName: 'editNode'

},

{

label: '删除',

funcName: 'deleteNode'

}

]

}

},

// 注入数据

data: {

type: Object

}

},

methods: {

clickMenu(item) {

this.$emit(item.funcName, this.data)

}

}

}

模板代码很简单,是一个点击触发的下拉菜单组件(trigger="click"),菜单循环props中传入的events属性,data为从父组件拿到的数据,定义了菜单和菜单的事件(方法名称),当点击菜单(@click.native)时,触发:

this.$emit(item.funcName, this.data)

容易看出,数据和实现方法都是父组件的,该子组件只做了转发。

3、 父组件使用子组件

引入和注册子组件,并定义好对应的方法即可。下面给出使用示例:

根据数据节点的类型,注入不同的events属性,显示不同的下拉框菜单。(常用场景:根节点不可删除、不可编辑,只能新增子级,叶子节点可以新增同级和子级)。

在父组件中的data中定义:

sysDropMenuEvents: [{ label: '新增资源', funcName: 'addNode' }],

dropMenuEvents: [

{ label: '新建同级', funcName: 'addPeerNode' },

{ label: '新建子级', funcName: 'addNode' },

{ label: '分配操作', funcName: 'distributeAction' },

{ label: '编辑', funcName: 'editNode' },

{ label: '删除', funcName: 'removeNode' }

]

父组件编写实际功能方法:

// 打开新增资源弹窗

addResource({ node, data }) {

...

}

父组件注入data时,将树节点插槽中的node和data都注入了进去(:data="{node,data}"),在使用时也可以用过同样的大括号+属性名的方式拿到对应的属性,这里体现了ES6解构赋值的特性。

4、父组件样式

父组件中,树节点的样式:

.el-tree-node__content {

position: relative;

.operate-btns {

position: absolute;

right: 2px;

display: none;

}

// 鼠标悬停时,展示

&:hover,

:focus-within {

.operate-btns {

display: inline;

}

}

}

}

子绝对,父相对,使操作按钮靠贴边显示

无状态时不显示,hover或内部元素被激活时显示(:hover :focus-within)

5、子组件样式

旋转图标

原本的图标使用的是element UI提供的 ,是横着的点点点↓

图标有点小,颜色也不喜欢。改下字体让它变大一点。这里注意需要修改的是元素的before伪类:

.el-icon-more:before {

content: "\E794";

color: #c0c4cc;

font-size: 20px;

}

加一个transform将它旋转90°,悬停时鼠标样式为pointer:

.rotate {

cursor: pointer;

margin-left: 5px;

transform: rotate(90deg);

}

点击时,增加圆形半透明的灰色背景:

.rotate:focus {

width: 20px;

height: 20px;

border-radius: 4em;

background-color: rgba(130, 132, 138, 0.2);

}

至此,下拉全部完成。

除了用在树节点中,也可以用在表格中。

输入过滤框

el-tree提供了过滤方法,使用:filter-node-method="filterNode"属性即可。这里主要分享样式:

效果:

模板代码:

去掉输入框上、左右边框和圆角,并两侧留出10px边距

.el-input__inner,.el-input-group__prepend{

width: calc(100% - 20px);

margin:0 10px;

height: 40px;

border-top:none;

border-width: 0 0 1px;

border-radius:0;

}

调整搜索图标大小、颜色和粗细,并稍微调整位置:

.el-input__prefix{

.el-input__icon{

margin-right: 15px;

display: inline-block;

}

font-size:18px;

}

此时点击输入框,只有下边变蓝色,希望图标的样式也随之更改。

只有input被触发了focus事件,icon感知不到,:focus伪类不满足需求了。我们可以使用:focus-within伪类,加在icon和input共同的父类上。

.el-input:focus-within{

.el-icon-search:before {

color: #3c6eff;

font-weight: bold;

}

}

至此完成。

总结

没写前端之前以为前端只是展示从后端拿到的数据,但现在觉得,前端作为面向用户的直接门面,承担了绝大部分交互体验优化的任务。

合理的布局和样式能避免用户的无效操作,体验的优化是一个漫长而细致的过程,可能需要仔细打磨,才能做出好用的产品。

以上就是Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)的详细内容,更多关于Vue+Element UI 整合下拉菜单的资料请关注脚本之家其它相关文章!

elementui树状菜单tree_Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)...相关推荐

  1. Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)

    这篇博客主要介绍树形控件的两个小小的功能: 下拉菜单 输入过滤框 以CSS样式为主,也会涉及到Vue组件和element组件的使用. 对于没有层级的数据,我们可以使用表格或卡片来展示.要展示或建立层级 ...

  2. elementui树状菜单tree_vue.js+element-ui做出菜单树形结构

    这次给大家带来vue.js+element-ui做出菜单树形结构,vue.js+element-ui做出菜单树形结构的注意事项有哪些,下面就是实战案例,一起来看一下. 由于业务需要,要求实现树形菜单, ...

  3. Element UI-给树形控件添加图标

    Element UI-给树形控件添加图标 element ui 提供的树形控件默认是不支持添加图标的,如下所示: 如果要想要在节点自定义树形控件的图标,可以使用slot-scope,代码如下: 其代码 ...

  4. element ui中的el-dropdown(下拉框)防止点一下就隐藏的问题

    element ui中的el-dropdown(下拉框)防止点一下就影藏的问题 当使用el-dropdown下拉框时,下拉框的每项中,可能需要加入@click.@change或复选框等事件,而el-d ...

  5. elementui树状菜单tree_Java + Element-UI 实现简单的树形菜单

    一.简单入门级树形菜单实现(纯后台逻辑) 1.简介 (1)开发环境 IDEA + JDK1.8 + mysql 1.8 SpringBoot 2.2.6 + mybatis-plus 此处仅后台开发( ...

  6. element组件树形控件el-tree点击展开节点,节点重影

    本来想传视频看的清除一些,传不了视频,改gif格式还要下载软件算了 算了,凭手速截了这一张图. 先发现问题与解决 1.我是调用接口的时候发现的,有超级多的数据,本来以为我是数据多才出现这种问题, 2. ...

  7. element ui 图片控件 排序_JAVA全栈面试前端基础之四 Vue+Element框架快速开发

    本文主要包括以下4个内容 什么是ElementUI Vue 中引入ElementUI Vue+elementUI构建后台管理系统 开源项目推荐 1.什么是ElementUI 官网:https://el ...

  8. element ui 图片控件 排序_Element-ui上传图片后隐藏上存控件

    在使用Element-ui el-upload组件的时候,发现我只想上存一张图片,比如头像的上存,然而上存一张后,控件还可以继续上存. 一下的方法是Element-ui上传图片后隐藏上存控件. 在el ...

  9. element ui 图片控件 排序_vuedraggable+element ui实现页面控件拖拽排序效果

    项目要实现一些控件的拖拽排序.从而找到了这款vuedraggable控件,供大家参考,具体内容如下 如上图要实现这些控件的拖拽排序 这是拖拽后 由于公司网络的原因,项目没有使用npm,都是使用的引入的 ...

最新文章

  1. 开放式神经网络交换-ONNX(下)
  2. 使用迭代查找一个list中最小和最大值,并返回一个tuple。
  3. SDwebimage使用原理(转载)
  4. Java多线程2:Thread中的实例方法
  5. PCL中PFH、FPFH理论
  6. VMware虚拟机打开后不兼容
  7. zdal配置文件_Autofac的基本使用---4、使用Config配置
  8. 这些新技术你们都知道吗?成功收获美团,小米安卓offer
  9. [原创] MyEclipse配置Tomcat和MySQL
  10. python自加1_python中有自增
  11. python实时策略_Python策略模式
  12. 亚马逊遭遇15万人联名抗议:AI刷脸可以,但卖给政府不OK
  13. 阿里云服务器安装mysql数据库及连接使用
  14. Code Snippets for Windows Mobile 5 in C#
  15. 阿里巴巴高级Java面试题(首发,70道)
  16. 震惊!没想到你居然是这样的for循环(UC打钱!)
  17. 分数化小数计算机在线,循环小数化分数计算器
  18. Android开发论坛汇总
  19. android MediaPlayer 完成播放后无法再次播放
  20. 【matlab教程】20、简单网格细分

热门文章

  1. 【软件测试】Homework 1 Briefly describe an error
  2. Linux命令篇之history命令和alias命令
  3. 20160408javaweb之JDBC 大二进制和大文件存取
  4. LINUX下的流量监控shell脚本
  5. javascript算法汇总(持续更新中)
  6. 陶哲轩实分析 命题7.2.5 证明
  7. 冰点文库下载V2绿色版,无需积分自由下载百度,mbalib,豆丁,畅享,hp009,max.book118 文档...
  8. SQL语法精讲(包括建库、建表、建视图、查询、增加、删除、修改)
  9. server sql 多表事物 自增id_最实用的 SQL 语句收藏,程序员看完这篇就够了!
  10. X86汇编语言从实模式到保护模式09:32位x86处理器编程架构