diff --git a/components/tree-select/demo/checkable.vue b/components/tree-select/demo/checkable.vue
index 868add70b..36f435e77 100644
--- a/components/tree-select/demo/checkable.vue
+++ b/components/tree-select/demo/checkable.vue
@@ -27,9 +27,9 @@ Multiple and checkable.
/>
diff --git a/components/tree-select/demo/index.vue b/components/tree-select/demo/index.vue
index 87fa10469..4a3b57646 100644
--- a/components/tree-select/demo/index.vue
+++ b/components/tree-select/demo/index.vue
@@ -7,6 +7,9 @@
+
+
+
diff --git a/components/tree-select/demo/virtual-scroll.vue b/components/tree-select/demo/virtual-scroll.vue
new file mode 100644
index 000000000..f8c5eb847
--- /dev/null
+++ b/components/tree-select/demo/virtual-scroll.vue
@@ -0,0 +1,73 @@
+
+---
+order: 9
+title:
+ zh-CN: 虚拟滚动
+ en-US: Virtual scroll
+---
+
+## zh-CN
+
+使用 `height` 属性则切换为虚拟滚动。
+
+## en-US
+
+Use virtual list through `height` prop.
+
+
+
+
+
+ {{ title }}
+ {{ title }}
+
+
+
+
diff --git a/components/vc-select/Selector/MultipleSelector.tsx b/components/vc-select/Selector/MultipleSelector.tsx
index 4fddf5dfb..3919d1f39 100644
--- a/components/vc-select/Selector/MultipleSelector.tsx
+++ b/components/vc-select/Selector/MultipleSelector.tsx
@@ -10,6 +10,7 @@ import type { VueNode } from '../../_util/type';
import Overflow from '../../vc-overflow';
import type { DisplayValueType, RenderNode, CustomTagProps, RawValueType } from '../BaseSelect';
import type { BaseOptionType } from '../Select';
+import useInjectLegacySelectContext from '../../vc-tree-select/LegacyContext';
type SelectorProps = InnerSelectorProps & {
// Icon
@@ -79,7 +80,7 @@ const SelectSelector = defineComponent({
const measureRef = ref();
const inputWidth = ref(0);
const focused = ref(false);
-
+ const legacyTreeSelectContext = useInjectLegacySelectContext();
const selectionPrefixCls = computed(() => `${props.prefixCls}-selection`);
// ===================== Search ======================
@@ -147,15 +148,20 @@ const SelectSelector = defineComponent({
onPreventMouseDown(e);
props.onToggleOpen(!open);
};
+ let originData = option;
+ // For TreeSelect
+ if (legacyTreeSelectContext.keyEntities) {
+ originData = legacyTreeSelectContext.keyEntities[value]?.node || {};
+ }
return (
-
+
{props.tagRender({
label: content,
value,
disabled: itemDisabled,
closable,
onClose,
- option,
+ option: originData,
})}
);
diff --git a/components/vc-select/Selector/SingleSelector.tsx b/components/vc-select/Selector/SingleSelector.tsx
index a5004cb51..b67159a98 100644
--- a/components/vc-select/Selector/SingleSelector.tsx
+++ b/components/vc-select/Selector/SingleSelector.tsx
@@ -109,6 +109,7 @@ const SingleSelector = defineComponent({
let titleNode = null;
// custom tree-select title by slot
+ // For TreeSelect
if (item && legacyTreeSelectContext.customSlots) {
const key = item.key ?? item.value;
const originData = legacyTreeSelectContext.keyEntities[key]?.node || {};
diff --git a/components/vc-tree-select/TreeSelect.tsx b/components/vc-tree-select/TreeSelect.tsx
index 830043a5d..0d900158f 100644
--- a/components/vc-tree-select/TreeSelect.tsx
+++ b/components/vc-tree-select/TreeSelect.tsx
@@ -727,6 +727,7 @@ export default defineComponent({
OptionList={OptionList}
emptyOptions={!mergedTreeData.value.length}
onDropdownVisibleChange={onInternalDropdownVisibleChange}
+ tagRender={props.tagRender || slots.tagRender}
/>
);
};