Commit 6f845b53bdc4c33fbca3e65f10f64c63166bed0e
1 parent
d509e897
fix(table): selection-change not triggered on row click
修复selection-change事件在点击行来改变勾选时不会被触发的问题
Showing
1 changed file
with
19 additions
and
8 deletions
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 | ... | ... |