自己封装element-ui树组件的过滤

时间:2022-12-21 08:04:04

前言: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树组件的过滤的更多相关文章

  1. &lbrack;转&rsqb;vue Element UI走马灯组件重写

    https://blog.csdn.net/u013750989/article/details/82885482 1.element ui走马灯组件 -- carousel分析一波源代码:carou ...

  2. 封装一个优雅的element ui表格组件

    现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...

  3. 上传图片组件封装 element ui

    // element ui 文档地址: http://element.eleme.io/#/zh-CN <template> <div> <div class=&quot ...

  4. 普通element ui table组件的使用

    1.使用基础的element ui 的table的基础使用 首先,使用前要先引用element库到项目中,可以直接引入element的js和css或者在vue项目下按需加载不同的组件 废话不多说,直接 ...

  5. Element UI table组件源码分析

    本文章从如下图所示的最基本的table入手,分析table组件源代码.本人已经对table组件原来的源码进行削减,源码点击这里下载.本文只对重要的代码片段进行讲解,推荐下载代码把项目运行起来,跟着文章 ...

  6. element ui step组件在另一侧加时间轴显示

    这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...

  7. Element UI表格组件技巧:如何简洁实现跨页勾选、跨页统计功能

    业务场景 在使用Element UI的Table组件时,常常面对这样的业务需求: 表格数据的每一项都要提供勾选框,当切换分页时,能够记忆所有页面勾选的数据,以实现批量提交不同页面勾选数据的功能.并且, ...

  8. Element UI 中组件this&period;&dollar;message报错

    最近在做毕设的时候,用Element UI中的消息提示message一直报以下的错误: 展示的效果也不好看,没有图标什么的: 但我明明有在main.js引入了element-ui 呀,因为毕设时间很赶 ...

  9. vue&plus;element UI以组件递归方式实现多级导航菜单

    介绍 这是一个是基于element-UI的导航菜单组件基础上,进行了二次封装的菜单组件,该组件以组件递归的方式,实现了可根据从后端接收到的json菜单数据,动态渲染多级菜单的功能. 使用方法 由于该组 ...

随机推荐

  1. 学习Maven之Maven Enforcer Plugin

    1.Maven Enforcer plugin是什么鬼? 在说这个插件是什么前我们先思考这么一个问题:当我们开发人员进入项目组进行开发前,要准备开发环境,而领导总是会强调工具的统一,编译环境的统一.比 ...

  2. HDU 5908 Abelian Period&lpar;暴力&plus;想法题)

    传送门 Description Let S be a number string, and occ(S,x) means the times that number x occurs in S. i. ...

  3. 菜鸟学习WCF笔记-概念

    背景 WCF这个词语一直不陌生,以前也使用过多次在实际的项目中,但是一直没有时间来做个系统的学习,最近抽点时间,看看 蒋金楠的<WCF全面解析>学习下,顺带做些笔记,如有错误,欢迎各路大神 ...

  4. UIPage

    分页控件是一种用来取代导航栏的可见指示器,方便手势直接翻页,最典型的应用便是iPhone的主屏幕,当图标过多会自动增加页面,在屏幕底部你会看到原点,用来只是当前页面,并且会随着翻页自动更新. 一.创建 ...

  5. word2007在试图打开文件时遇到错误解决方法

    当您尝试在 Microsoft Office Word 2007 中打开 .docx 文件时,该文件打不开.此外,您还会收到以下错误消息: Word 在试图打开文件时遇到错误.请尝试下列方法:* 检查 ...

  6. Tomcat根目录下work文件夹的作用

    今天遇到了这样的一个问题:就是我之前把项目部署到了tomcat下,运行没有任何问题,后来我把我之前的改项目的原项目文件部署上去后,运行时总是出现之前的界面,而服务器又是启动正常的;通过仔细的检查后,发 ...

  7. Backbone&plus;React使用

    1.react作为backbone的视图 2.backone和react和通信,backbone的view 渲染react组件, react组件使用backbone的collection数据 < ...

  8. &lbrack;HNOI2002&rsqb;营业额统计&lowbar;Treap

    [HNOI2002]营业额统计 题目大意:给你一串n数序列,对于每一个刚输入的数a,找到一个前面的数k,使得|a-k|最小. 注释:$n<=32767,ai<=10^6$. 想法:刚学Tr ...

  9. kubernetes 1&period;3 使用skydns &plus; kube2dns &plus;etcd部署DNS服务器

    1. 直接从Docker中拉取skydns,kube2dns,etcd容器,放到一个Pod中 kube2sky:1.14 etcd:2.0.9 skydns-amd64 2. 创建RC apiVers ...

  10. Java如何计数字串中的一组词组?

    在Java编程中,如何计数字串中的一组词组? 以下示例演示如何使用regex.Matcher类的matcher.groupCount()方法来计算字符串中的一组词组. package com.yiib ...