bio_relex icon indicating copy to clipboard operation
bio_relex copied to clipboard

如何清除选项框的选择状态?

Open sword913 opened this issue 7 years ago • 13 comments

如何清除选项框的选择状态? 比如有没有方法可以全部清除勾选状态?

sword913 avatar Jan 10 '18 14:01 sword913

因为是树,如果清除根节点的选择状态,那么所有后代节点都会清除

jiaxincui avatar Jan 11 '18 02:01 jiaxincui

对的,因为我的业务是在弹出框里面显示权限树,第一次操作之后,关闭了弹出框,但是第二次打开的时候,需要清空所有的选择状态,请问怎么清空呢?

sword913 avatar Jan 11 '18 03:01 sword913

v-model绑定空数组即可

jiaxincui avatar Jan 11 '18 03:01 jiaxincui

v-model绑定空数组即可 没有效果。。。能不能加我一下QQ 15439509 帮我看一下问题在哪?

sword913 avatar Jan 11 '18 03:01 sword913

你必须确认第二次打开弹出框的时候数组已经清空

jiaxincui avatar Jan 11 '18 04:01 jiaxincui

确定了。第二次打开之前我设置了ids=[]

sword913 avatar Jan 11 '18 04:01 sword913

这或许是v2.3之后的一个问题,因为2.3之后没有watch ids,导致双向绑定失效

jiaxincui avatar Jan 11 '18 04:01 jiaxincui

能修复这个问题吗?找了好久就您的这个Tree比较好用,希望尽快

sword913 avatar Jan 11 '18 04:01 sword913

目前初始化的时候绑定是有效的,但后续操作绑定是单向的,我会尽快修复这个问题

jiaxincui avatar Jan 11 '18 04:01 jiaxincui

多谢了,我把2.23的watch那段代码复制到2.3的源码中就行了。

sword913 avatar Jan 11 '18 04:01 sword913

另外还有个BUG,设置ids=[]后,如果第一个父节点是半选状态,是没有重置成功的

sword913 avatar Jan 11 '18 04:01 sword913

不可直接复制v2.2版本的watch代码,你可加入这段代码到 Item.vue 里的 watch 块里

ids (val) {
        if (val.indexOf(this.model.id) !== -1) {
          this.addChecked()
          this.$emit('child-change', true)
        } else {
          this.delChecked()
          this.$emit('child-change', false)
        }
      }

jiaxincui avatar Jan 11 '18 08:01 jiaxincui

对于树形选择框,逻辑上应该是初始化的时候绑定选择状态,而后续操作仅作为单向绑定即可,因为如果进行了双向绑定难免会引起程序混乱,因为这牵涉到半选、目录勾选状态等。 例如, 当我们勾选一个目录的时候,它的所有后代也一起被勾选了,那么问题来了 如果我们在 ids 里手动添加了一个目录的id, 那么它的所有后代应该全部选择才符合逻辑,事实上当我们添加这个 id 的时候往往没有考虑到这点,如果手动修改难免会引起程序错误。这也是树形选择框面临的一个尴尬问题。 基于此,我决定暂不修复这个问题,等有了好的思路再行修复,如果想重新绑定 ids 你必须销毁此组件重新初始化。

jiaxincui avatar Jan 11 '18 08:01 jiaxincui