소스 검색

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

修复selection-change事件在点击行来改变勾选时不会被触发的问题
无木 3 년 전
부모
커밋
6f845b53bd
1개의 변경된 파일19개의 추가작업 그리고 8개의 파일을 삭제
  1. 19 8
      src/components/Table/src/hooks/useRowSelection.ts

+ 19 - 8
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(),
+        });
+      });
     }
   );