我的页面如下图(菜单权限的编辑):
我最开始的思路是在初始化的时候给控件的属性 default-checked-keys 一个默认选中的key数组(比如 defaultKeys 变量,且是双向绑定),同时绑定 check 事件,在选中的时候获取到key然后赋值给 defaultKeys。
但遇到了以下问题
1. 当如上图 最新安全消息 按钮的key放到 defaultKeys 中,无论子元素是否在改变量中这一块都会全部选中
解决办法:避免母tab放在 defaultKeys 中,可以在赋值给 defaultKeys 前先清除母tab的key值
2. 因为 defaultKeys 是双向绑定的,且每次在选中的时候获取到key然后赋值给 defaultKeys,按理来说保存的时候拿 defaultKeys 即可,但是后端php在其他地方拿这个菜单列表的规则是:如果没有母菜单,子菜单是不会显示出来的,所以这最终导致拿到的数据不完整。
解决:在保存的时候用以下代码即可(注意在用$refs需要给控件一个ref值,如我的是ref="ww"):
// 勾选的key var checkedKeys = this.$refs.ww.getCheckedKeys() // 暂选状态的母tab的key var halfKeys = this.$refs.ww.getHalfCheckedKeys()) // 合并两个数组 save = checkedKeys.concat(halfKeys)