自己封装element-ui树组件的过滤
前言:vue开发项目时用到了element-ui的树组件,但是发现一执行过滤事件,树就全部都展开了,为了解决这个问题,只能自己先过滤数剧,再赋值给树组件的data,就避免了一上来全部展开的尴尬。
一、简单版本
data() {
return {
shopsData: [],
arrData: [{
label: '一级 1',
children: [{
label: '二级 1-1',
children: [{
label: '三级 1-1-1'
}]
}]
}, {
label: '一级 2',
children: [{
label: '二级 2-1',
children: [{
label: '三级 2-1-1'
}]
}, {
label: '二级 2-2',
children: [{
label: '三级 2-2-1'
}]
}]
}, {
label: '一级 3',
children: [{
label: '二级 3-1',
children: [{
label: '三级 3-1-1'
}]
}, {
label: '二级 3-2',
children: [{
label: '三级 3-2-1'
}]
}]
}]
}
},
methods: {
filterByName(menu, type, name) { //过滤树组件
var menuNew = [];
for (var i = 0; i < menu.length; i++) {
var nodeNew = undefined;
var node = menu[i]; //同级的每一个根节点
var childrenNode = node.children; //子节点
var childrenMenu = [];
if (childrenNode) {
if (childrenNode.length > 0) { //子节点下面的子节点递归
childrenMenu = this.filterByName(childrenNode, type, name);
}
}
if (childrenMenu) {
if (childrenMenu.length > 0) {
nodeNew = new Object();
nodeNew = this.nodeFillNewFromOld(node, nodeNew);
nodeNew.sublist = childrenMenu; //复制子节点
} else {
if (this.checkNodeEquals(node, type, name)) {
nodeNew = new Object();
nodeNew = this.nodeFillNewFromOld(node, nodeNew);
}
}
}
if (nodeNew) {
menuNew.push(nodeNew);
}
}
return menuNew;
},
nodeFillNewFromOld(oldNode, newNode) { //添加属性
newNode.disabled = oldNode.disabled;
newNode.enabled = oldNode.enabled;
newNode.level = oldNode.level;
newNode.name = oldNode.name;
newNode.onlyHasShop = oldNode.onlyHasShop;
newNode.orgType = oldNode.orgType;
newNode.orgcode = oldNode.orgcode;
newNode.parentCode = oldNode.parentCode;
newNode.prmType = oldNode.prmType;
newNode.showPage = oldNode.showPage;
newNode.children = oldNode.children;
return newNode;
},
checkNodeEquals(node, type, name) { //过滤条件
if (node.type === 2) {
node.disabled = true
}
if (node.orgcode.indexOf(name) === 0) {
return true;
} else {
return false;
}
}
},
mounted() {
this.shopsData = this.filterByName(this.arrData, 'label', '二级 2-1');
}
二、升级版本
filterTree(nodes, predicate, childKey = 'children') { //predicate过滤条件函数
if (!nodes || !nodes.length) return void 0
const children = []
for (let node of nodes) {
node = Object.assign({}, node)
const sub = this.filterTree(node[childKey], predicate, childKey)
if ((sub && sub.length) || predicate(node)) {
sub && (node[childKey] = sub)
children.push(node)
}
}
return children.length ? children : void 0
},
shopfilterNode(data) { //过滤条件
if (data.orgType === 2) {
data.disabled = true
}
return data.prmType >= 0 && data.orgcode.indexOf(this.groupcode) === 0;
},
mounted() {
this.shopsData = this.filterTree(this.arrData, this.shopfilterNode, 'sublist')
}
自己封装element-ui树组件的过滤的更多相关文章
- [转]vue Element UI走马灯组件重写
https://blog.csdn.net/u013750989/article/details/82885482 1.element ui走马灯组件 -- carousel分析一波源代码:carou ...
- 封装一个优雅的element ui表格组件
现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...
- 上传图片组件封装 element ui
// element ui 文档地址: http://element.eleme.io/#/zh-CN <template> <div> <div class=" ...
- 普通element ui table组件的使用
1.使用基础的element ui 的table的基础使用 首先,使用前要先引用element库到项目中,可以直接引入element的js和css或者在vue项目下按需加载不同的组件 废话不多说,直接 ...
- Element UI table组件源码分析
本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...
- element ui step组件在另一侧加时间轴显示
这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...
- Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能
业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...
- Element UI 中组件this.$message报错
最近在做毕设的时候,用Element UI中的消息提示message一直报以下的错误: 展示的效果也不好看,没有图标什么的: 但我明明有在main.js引入了element-ui 呀,因为毕设时间很赶 ...
- vue+element UI以组件递归方式实现多级导航菜单
介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...
随机推荐
- gradle 编译 "aapt.exe'' finished with non-zero exit value 1 问题
升级了一下android studio的版本,从3.0升级到3.3,升级过后,编译确实快了不少,但项目导入后一直报 "aapt.exe'' finished with non-zero ex ...
- python实现压缩当前文件夹下的所有文件
import os import zipfile def zipDir(dirpath, outFullName): ''' 压缩指定文件夹 :param dirpath: 目标文件夹路径 :para ...
- NBIoT三种部署方式【转】
转自:https://472880.kuaizhan.com/89/34/p441944286fccf2 本文作者:吴老司撩通信 本文来源:EETOP NB-IoT支持在频段内(In-Band).保护 ...
- c++入门篇五
默认参数: //默认参数//函数的默认参数,参数后面有'='//函数参数注意事项,如有一个位置有了默认参数//那么从该位置的后面就必须要有参数 , ) { //b有默认参数,b的后面也应该要有默认参数 ...
- 写一个python脚本监控在linux中的进程
在虚拟机中安装Linux中的CentOS7系统 https://baijiahao.baidu.com/s?id=1597320700700593557&wfr=spider&for= ...
- USB鼠标键盘数据格式以及按键键值
鼠标发送给PC的数据每次4个字节 BYTE1 BYTE2 BYTE3 BYTE4 定义分别是: BYTE1 -- |--bit7: 1 表示 Y 坐标的变化量超出-256 ...
- js 对象,数组,字符串,相互转换
1:对象转换数组 let obj = {'val1':1, 'val2':2, 'val3':3, 'val4':4}; var arr = [] for (let i in obj) { //取键 ...
- LoadRunner场景设置
创建负载测试场景场景目标:模拟10家旅行社同时登陆.搜索航班.购买机票.查看航班路线并退出打开Controller并创建一个新场景1.打开HP LoadRunner2.打开Controller在Loa ...
- kubernetes集群网络配置方案
1. 直接路由 在每个节点上添加其他节点的静态路由,就可以将不同物理机的docker0网桥互联互通. 我的两个节点的IP分别为:172.16.252.218和172.16.252.209. 两个doc ...
- python requests下载图片
# 文件下载方法 from urllib.request import urlretrieve import requests # 第一 urlimage = 'https://www.python. ...