From 6f845b53bdc4c33fbca3e65f10f64c63166bed0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=A0=E6=9C=A8?= Date: Wed, 30 Jun 2021 15:43:32 +0800 Subject: [PATCH] fix(table): selection-change not triggered on row click MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复selection-change事件在点击行来改变勾选时不会被触发的问题 --- .../Table/src/hooks/useRowSelection.ts | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/components/Table/src/hooks/useRowSelection.ts b/src/components/Table/src/hooks/useRowSelection.ts index 63f90edb..b984e91e 100644 --- a/src/components/Table/src/hooks/useRowSelection.ts +++ b/src/components/Table/src/hooks/useRowSelection.ts @@ -1,6 +1,6 @@ import { isFunction } from '/@/utils/is'; import type { BasicTableProps, TableRowSelection } from '../types/table'; -import { computed, ref, unref, ComputedRef, Ref, toRaw, watch } from 'vue'; +import { computed, ref, unref, ComputedRef, Ref, toRaw, watch, nextTick } from 'vue'; import { ROW_KEY } from '../const'; import { omit } from 'lodash-es'; @@ -24,12 +24,6 @@ export function useRowSelection( onChange: (selectedRowKeys: string[], selectedRows: Recordable[]) => { selectedRowKeysRef.value = selectedRowKeys; selectedRowRef.value = selectedRows; - const { onChange } = rowSelection; - if (onChange && isFunction(onChange)) onChange(selectedRowKeys, selectedRows); - emit('selection-change', { - keys: selectedRowKeys, - rows: selectedRows, - }); }, ...omit(rowSelection === undefined ? {} : rowSelection, ['onChange']), }; @@ -38,7 +32,24 @@ export function useRowSelection( watch( () => unref(propsRef).rowSelection?.selectedRowKeys, (v: string[]) => { - selectedRowKeysRef.value = v; + setSelectedRowKeys(v); + } + ); + + watch( + () => unref(selectedRowKeysRef), + () => { + nextTick(() => { + const { rowSelection } = unref(propsRef); + if (rowSelection) { + const { onChange } = rowSelection; + if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows()); + } + emit('selection-change', { + keys: getSelectRowKeys(), + rows: getSelectRows(), + }); + }); } ); -- GitLab