位置: IT常识 - 正文

element-ui tree 异步树实现勾选自动展开、指定展开、指定勾选

编辑:rootadmin
背景 项目中用到了vue的element-ui框架,用到了el-tree组件。由于数据量很大,使用了数据懒加载模式,即异步树。异步树采用复选框进行结点选择的时候,没法自动展开,官方文档找了半天也没有找到好的办法! 找不到相关的配置,或者方法可以使用。 经过调试与阅读elment-ui源码才发现有现成 ...

推荐整理分享element-ui tree 异步树实现勾选自动展开、指定展开、指定勾选,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

背景

项目中用到了vue的element-ui框架,用到了el-tree组件。由于数据量很大,使用了数据懒加载模式,即异步树。异步树采用复选框进行结点选择的时候,没法自动展开,官方文档找了半天也没有找到好的办法! 找不到相关的配置,或者方法可以使用。 经过调试与阅读elment-ui源码才发现有现成的方法可以进行结点展开。下面就介绍结点展开的实现!

1.监听复选框点击事件check

<el-tree :props="mulprops" :load="loadNode" lazy node-key="id" show-checkbox accordion @current-change="currentChange" :filter-node-method="filterNode" @check="handleCheck" ref="tree" :default-checked-keys="defaultCheckedNodes" :default-expanded-keys="defaultExpandedNodes" > </el-tree>

2.手动展开,使用node.expand()方法

handleCheck(nodeData, treeChecked) { let node = this.$refs.tree.getNode(nodeData.id) //将选中的未展开的节点进行展开 if(node.checked && !node.expanded){ node.expand(function(){ for(let i=0; i< node.childNodes.length; i++){ node.childNodes[i].expand() } }) } }element-ui tree 异步树实现勾选自动展开、指定展开、指定勾选

项目中的实现

一、复选框勾选后能自动展开并选中,先展开再勾选也可以自动展开

1.监听check-change事件

<el-tree :props="mulprops" :load="loadNode" lazy node-key="id" show-checkbox accordion @check-change="handleCheckChange" :filter-node-method="filterNode" ref="tree" :default-checked-keys="defaultCheckedNodes" :default-expanded-keys="defaultExpandedNodes" > </el-tree>

2.编写展开勾选结点方法

handleCheckChange(nodeData, nodeSelected) { let tree = this.$refs.tree; let node = tree.getNode(nodeData.id) //展开选中的未展开的节点 this.expandCheckedNotExpandNodes(node); //具体业务实现 console.log(nodeData, nodeSelected) }, //展开选中的未展开的节点 expandCheckedNotExpandNodes(node) { let tree = this.$refs.tree; if (node.checked && !node.expanded && !node.isLeaf) { node.expand(function () { let childNodes = node.childNodes; for (let i = 0; i < childNodes.length; i++) { let childNode = childNodes[i]; //手动触发check-change事件,事件处理函数中回继续调用此函数,形成递归展开 tree.$emit('check-change', childNode.data, childNode.checked, childNode.indeterminate); } }) } },

二、 展开指定结点

<el-input type="text" v-model='nodeDataIds' placeholder="请输入结点数据ID(多个以逗号分割)"> ></el-input> <el-button type="primary" @click="expandNodes(nodeDataIds.split(','))">展开指定结点</el-button> //展开匹配的结点,根结点默认展开 expandNodes(nodeDataIds){ let that = this; let tree = this.$refs.tree; let rootNode = tree.root; //展开一层结点函数 let expandRootChildren = function(){ let childNodes = rootNode.childNodes; for (let i = 0; i < childNodes.length; i++) { let childNode = childNodes[i]; that.expandNode(childNode,nodeDataIds); } }; //根结点未展开进行展开 if(!rootNode.expanded){ rootNode.expand(function(){ //展开根结点的孩子 expandRootChildren(); }); }else{ //展开根结点的孩子 expandRootChildren(); } }, //展开指定结点下匹配的结点 expandNode(node, nodeDataIds){ let that = this; //当前结点需要展开未展开,则展开 if(nodeDataIds.indexOf(node.data.id) != -1){ //孩子结点需要展开未展开,则展开 let expandChildren = function(){ let childNodes = node.childNodes; for (let i = 0; i < childNodes.length; i++) { let childNode = childNodes[i]; //递归展开孩子结点 that.expandNode(childNode, nodeDataIds); } } if(!node.expanded){ node.expand(function(){ expandChildren(); }); }else{ expandChildren(); } } },

三. 勾选指定结点

1.异步树,需先展开指定结点,然后有数据了才能勾选上(即:展开父结点,子节点有了数据才能勾选上)

<el-button type="primary" @click="checkNodes(nodeDataIds.split(','))">选中指定结点</el-button> checkNodes(nodeDataIds){ let tree = this.$refs.tree; tree.setCheckedKeys(nodeDataIds, false) }

2.设置默认勾选的结点,首次展开会自动勾选上,适合写数据回显

default-checked-keys=['node001','node002']
本文链接地址:https://www.jiuchutong.com/zhishi/310137.html 转载请保留说明!

上一篇:为你的WordPress添加图片替换功能 Enable Media Replace(wordpress!)

下一篇:Python中包如何发布?(python包发布)

  • 税务师考试各科老师推荐
  • 土地摊销全部计入成本吗
  • 公司不交工会经费的原因,风险说明
  • 开办期间的费用,没有发票,咋抵扣啊
  • 领用自产产品用于职工食堂
  • 企业所得税减免政策2023
  • 销售使用过的固定资产3%减按2%
  • 外购商品对外捐赠分录
  • 结转损益主营业务成本在借方还是贷方
  • 购入材料时,会出现哪几种情况
  • 从联营企业分回利润可以在税前扣除吗
  • 本月进项大于销项怎么做会计分录
  • 筹建期的行政罚款的账务处理怎么做?
  • 个人在电商平台购买跨境商品需要缴纳什么税
  • 一般纳税人小型微利企业印花税
  • 代增值税专用发票网上申请
  • 预征税额是什么意思
  • 一般户开户行可以开增值税专票么
  • 银行手续费回单可以作为报销
  • 其他资本公积如何花掉
  • 普通发票个人所得税隔审了怎么弄
  • 年末提取盈余公积的会计分录怎么写
  • 房租付款和发票有关系吗
  • 金蝶存货核算的基本流程
  • virtualbox打不开虚拟机
  • SQL Server2005、2008如何彻底删除卸载并重新安装?
  • 2021年8月现在还能去武汉吗
  • 企业所得税汇算清缴会计分录
  • php语句和php变量都是区分大小写的
  • hiddenalbum是什么文件夹
  • 对方开过来的专票丢了怎么办
  • 董事费如何计算个人所得税
  • 带着崽崽宠老公免费阅读
  • 企业股股票
  • 增值税即征即退操作流程
  • form表单参数传递
  • 负数发票跨月怎么做账
  • idea2021版本创建项目
  • SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算的概念
  • dedecms安装步骤
  • 采购供应部门发挥的作用
  • 外购固定资产对公司影响
  • 固定资产后续支出
  • 存货科目计算公式是什么
  • 投入产出法如何申报
  • 银行存款核算如何操作
  • 应付账款现金折扣会计分录
  • 如何计算债券实际收益
  • 普通发票采购分录
  • 免税收入计入起征点吗
  • 房屋装修费用的会计科目
  • 存货与总账对账
  • 中小型企业会计
  • win8系统如何激活
  • 苹果mac怎么下载英雄联盟
  • linux常用命令修改
  • wweb32.exe - wweb32是什么进程
  • sonytray.exe - sonytray是什么进程
  • win81蓝屏重启故障
  • win10右键菜单快捷键
  • node.js jquery
  • jquery转dom
  • jquery排序上升和排序下降
  • auto.js粘贴代码
  • 服务器安全设备
  • 黑马程序员学费多少钱2018
  • javascript用处
  • 开源安卓app
  • shell语言的特点
  • 在javascript中用下面哪个关键词来定义变量
  • node.js的express
  • js实现功能
  • jquery trigger实现联动的方法
  • android 进程通信
  • jQuery实现table中的tr上下移动并保持序号不变的实例代码
  • 全面解析俄乌武器对比
  • 发票查验结果怎么保存
  • 物流企业需要缴税吗
  • 国税电子版
  • 社保在哪里缴费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设