toggleRowSelection不生效

3,430 阅读1分钟

toggleRowSelection不生效的坑

toggleRowSelection是干什么用的?

1.toggleRowSelection是用来控制table表格选择框回显的方法,这个方法躲在ref里面,通过表格组件定义的ref=table’,然后通过 this.$refs['table'].toggleRowSelection()来调用。
2.这个方法有两个参数toggleRowSelection(item, true),第一个参数是你准备回显哪一项,也就是表格对应的哪一行,第二个就是那个勾勾,true就是勾上。
3.当你想要回显表格的选择框,正常的流程会是:有一个表格,选中了其中几项数据,那么表格(场景A)自带的 @selection-change 方法是不是会获取到你当前选中的行,然后生成一个数组给你使用?然后你可能用这个数组去放在另外一个地方(场景B)渲染,来告诉用户,这是你从那个表格筛选出来的数据。
然后场景B中,可能你只需要显示他的名字就行,也可以删除。当你选了3个,删除了2个,场景B里只剩一个了。这个时候你再去打开那个表格,那么表格的选择框是不是只能显示一项数据被勾选,这个时候就需要使用 toggleRowSelection 方法来实现这个需求了。

toggleRowSelection调用要注意什么?

1.你调用 toggleRowSelection 的时候 要先调用 clearSelection()方法来清空表格的所有勾选框,然后再通过 toggleRowSelection(item, true)来控制表格哪些项需要勾选。
  这两行代码都需要放在 this.$nextTick(()=>{放在这里}) 里面。这样才会生效。一般这个时候大部分都会生效,但是还有个坑,可能你无意中躲过去了,但是它实实在在的在那里,迟早你会踩上。
2.这也是我写这个文章的重点,前面提到了 @selection-change 这个方法生成的table表格的数据list,这个数据是你能正常回显的关键,因为其中的引用类型关系存在,所以一定要把这个数据回传给toggleRowSelection(item,true)中的那个item才行,但是你也不能直接循环 list,因为当你调用clearSelection()的时候会清除这个list,所以你需要根据这个list生成一个新的 newArr,就是将 list中的item, push到newArr里面,push的过程中你可以随便加你想要的自定义属性!这样 newArr数组和list就有了斩不断理还乱的关系,然后你再循环 newArr来调用 toggleRowSelection,循环传进 item,这样就可以实现啦!
总结: 重点的坑就是这个引用类型的坑,他们一定要是同宗同源的数据才行啊!