导航菜单的增删改查页面中,
原本是只保存子节点,展示的时候tree树形组件会自动选中子节点的父节点,如下图
在这里插入图片描述
(仅)保存tree树形组件勾选节点时使用的代码是

this.$refs.tree.getCheckedKeys()

该方法在element官方API中的描述如下:
在这里插入图片描述
————————————————————————————————————

展示tree树形控件勾选节点也就是子节点(及其父节点)时使用的代码是

 this.$refs.tree.setCheckedKeys(this.toTree.defaultCheckedKeys)

该方法在element官方API中的描述如下:

在这里插入图片描述
————————————————————————————————————
但是因为这个导航菜单(elementd的Tree组件形式)不仅仅只展示在这个增删改查页面,它还出现在页面左侧,是整个平台的导航菜单(不是elementd的Tree组件)

所以会出现这种情况:
给一个角色赋权,在菜单增删改查页面中仅勾选了【后台菜单管理】,保存
↓↓↓
前端传给后端【后台菜单管理】节点的id,后台保存
↓↓↓
当这个角色所属的用户登录时,他看到的左侧导航菜单中,不会出现【系统管理】【资源管理】这种父节点菜单,只会看到光秃秃的的一个【后台菜单管理】,菜单的层级关系消失了

为了避免这种情况的出现,我们需要在增删改查页面中保存tree树形组件勾选节点以及勾选节点的父节点
更改后代码如下

this.$refs.tree.getCheckedKeys().concat(this.$refs.tree.getHalfCheckedKeys())

该方法在element官方API中的描述如下:
在这里插入图片描述
————————————————————————————————————

虽然左侧导航页面能正常显示层级关系了,但是这样又引出来一个问题
elemetUI的tree组件,在接收到半选中节点(父节点)时,会勾选它下面的所有子节点
所以这样增删改查页面的菜单展示就变得不正常了
我首先想到的是剔除半选中节点(父节点)再赋值给tree组件,然后查资料看大佬们怎么写的,
在这里插入图片描述
https://blog.csdn.net/deng1456694385/article/details/83515057

大佬描述的很好(比我的问题描述好多了TvT),看了看剔除的方法,写的有点麻烦的。。。
然后我就问我旁边坐着的我们组的后端大神,有没有更简便的算法去剔除半选状态的父节点,
大神首先想的就是这个方法,组件里有没有封装,要不要自己去写,
我就说没有封装吧,不然为什么这么多人自己写
大神不相信,自己找,在没有看elementui的官方文档情况下,ctrl左键找出了这个方法,
在这里插入图片描述
然后跟我说循环赋值就行了

这就是大神和凡人的区别吧,虽然他是写后端的,但是在代码中解决问题的思路不分前后端,我还需要多学习学习T_____T
最后解决问题的代码如下:

this.$refs.tree.setCheckedKeys([])//置空
this.toTree.defaultCheckedKeys.forEach((item) => {
	this.$refs.tree.setChecked(item, true, false)//单个节点循环赋值
})

该方法在api中描述如下
在这里插入图片描述

Logo

前往低代码交流专区

更多推荐