Commit 6f845b53bdc4c33fbca3e65f10f64c63166bed0e

Authored by 无木
1 parent d509e897

fix(table): selection-change not triggered on row click

修复selection-change事件在点击行来改变勾选时不会被触发的问题
src/components/Table/src/hooks/useRowSelection.ts
1 1 import { isFunction } from '/@/utils/is';
2 2 import type { BasicTableProps, TableRowSelection } from '../types/table';
3   -import { computed, ref, unref, ComputedRef, Ref, toRaw, watch } from 'vue';
  3 +import { computed, ref, unref, ComputedRef, Ref, toRaw, watch, nextTick } from 'vue';
4 4 import { ROW_KEY } from '../const';
5 5 import { omit } from 'lodash-es';
6 6  
... ... @@ -24,12 +24,6 @@ export function useRowSelection(
24 24 onChange: (selectedRowKeys: string[], selectedRows: Recordable[]) => {
25 25 selectedRowKeysRef.value = selectedRowKeys;
26 26 selectedRowRef.value = selectedRows;
27   - const { onChange } = rowSelection;
28   - if (onChange && isFunction(onChange)) onChange(selectedRowKeys, selectedRows);
29   - emit('selection-change', {
30   - keys: selectedRowKeys,
31   - rows: selectedRows,
32   - });
33 27 },
34 28 ...omit(rowSelection === undefined ? {} : rowSelection, ['onChange']),
35 29 };
... ... @@ -38,7 +32,24 @@ export function useRowSelection(
38 32 watch(
39 33 () => unref(propsRef).rowSelection?.selectedRowKeys,
40 34 (v: string[]) => {
41   - selectedRowKeysRef.value = v;
  35 + setSelectedRowKeys(v);
  36 + }
  37 + );
  38 +
  39 + watch(
  40 + () => unref(selectedRowKeysRef),
  41 + () => {
  42 + nextTick(() => {
  43 + const { rowSelection } = unref(propsRef);
  44 + if (rowSelection) {
  45 + const { onChange } = rowSelection;
  46 + if (onChange && isFunction(onChange)) onChange(getSelectRowKeys(), getSelectRows());
  47 + }
  48 + emit('selection-change', {
  49 + keys: getSelectRowKeys(),
  50 + rows: getSelectRows(),
  51 + });
  52 + });
42 53 }
43 54 );
44 55  
... ...