iview table 中的checkbox 填坑

近期做的项目用到了iview的table组件,并且带有checkbox选择框。
这里写图片描述

实现目标:点击shift实现连选的功能
iview坑:
(1)给data设置_check的属性。 _checked属性会影响checkbox的选中状态。但是checkbox的选中状态不会影响_check 属性
(2)

iview 官方文档说:
@on-selection-change,只要选中项发生变化时就会触发,返回值为 selection,已选项。

实现效果并不是这样的,而是:
用程序设置_checked=true后,并不会触发该事件。也不会触发on-select-cancel 和on-select。只有通过鼠标再次点击checkbox,才会触发上述三项事件。虽然最后参数中的selection是正确的。

用程序切换某一行的选中状态,需要调用函数this.$refs.xxx.toggleSelect(i),调用该函数后,会触发on-select-cancel 、on-select、on-selection-change事件。但是在on-selection-change事件中得到的selection数据只有两条,第一下点击的元素和最后一下点击的元素。

用户选中了第一个和第四个,目标是1-4都选中。执行过程如下所示

        =====on-select======
            1
        =====on-selection-change=====
            1
        =====on-select=====
            1,4
(因为on-select的程序中有调用toggleSelect(i),所以以下四行是on-select函数内部调用两次toggleSelect的结果)
        =====on-select=====
            1,2,4
        =====on-selection-change=====
            1,2,4
        =====on-select=====
            1,2,3,4
        =====on-selection-change=====
            1,2,3,4

(on-select方法执行结束,再调用on-selection-change,所以导致on-selection-change最后的selection中只有两个选中的元素) 
        =====on-selection-change=====
            1,4

所以可以推理iview的执行过程如下:触发选中事件时,先调用on-select, 再调用on-selection-change。

猜你喜欢

转载自blog.csdn.net/love_parents/article/details/82219503