Skip to content

Commit 87ee4e1

Browse files
authored
chore: Add slot nodeKey. (#195)
1 parent 1f010e3 commit 87ee4e1

File tree

5 files changed

+25
-1
lines changed

5 files changed

+25
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ plugins: [
142142

143143
| Slot Name | Description | Parameters |
144144
| --------- | ----------------- | ---------------------- |
145+
| nodeKey | render node key | { node, defaultKey } |
145146
| nodeValue | render node value | { node, defaultValue } |
146147

147148
## Contributors

README.zh-CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,5 @@
4545

4646
| 插槽名 | 描述 | 参数 |
4747
| --------- | ---------- | ---------------------- |
48+
| nodeKey | 渲染节点键 | { node, defaultKey } |
4849
| nodeValue | 渲染节点值 | { node, defaultValue } |

example/Basic.vue

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646

4747
<h3>Slots:</h3>
4848
<div class="options">
49+
<div>
50+
<label>nodeKey</label>
51+
<input v-model="useNodeKeySlot" type="checkbox" />
52+
</div>
4953
<div>
5054
<label>nodeValue</label>
5155
<input v-model="useNodeValueSlot" type="checkbox" />
@@ -66,6 +70,13 @@
6670
:show-icon="showIcon"
6771
style="position: relative"
6872
>
73+
<template v-if="useNodeKeySlot" #nodeKey="{ node, defaultKey }">
74+
<template v-if="node.key === 'title'">
75+
<a>"{{ node.key }}":</a>
76+
</template>
77+
<template v-else>{{ defaultKey }}:</template>
78+
</template>
79+
6980
<template v-if="useNodeValueSlot" #nodeValue="{ node, defaultValue }">
7081
<template v-if="typeof node.content === 'string' && node.content.startsWith('http://')">
7182
<a href="node.content" target="_blank">{{ node.content }}</a>
@@ -122,6 +133,7 @@ export default {
122133
highlightMouseoverNode: true,
123134
collapsedOnClickBrackets: true,
124135
useNodeValueSlot: false,
136+
useNodeKeySlot: false,
125137
deep: 3,
126138
showIcon: false,
127139
};

src/components/Tree/index.vue

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,14 @@
4545
@value-change="handleValueChange"
4646
:style="itemHeight && itemHeight !== 20 ? { lineHeight: `${itemHeight}px` } : {}"
4747
>
48+
<template #key="slotProps">
49+
<slot
50+
name="nodeKey"
51+
:node="slotProps.node"
52+
:defaultKey="slotProps.defaultKey"
53+
/>
54+
</template>
55+
4856
<template #value="slotProps">
4957
<slot
5058
name="nodeValue"

src/components/TreeNode/index.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@
3333
<carets v-if="showIcon" :node-type="node.type" @click="handleIconClick" />
3434
</div>
3535

36-
<span v-if="node.key" class="vjs-key">{{ prettyKey }}:</span>
36+
<slot v-if="node.key" name="key" :node="node" :defaultKey="prettyKey">
37+
<span class="vjs-key">{{ prettyKey }}:</span>
38+
</slot>
3739

3840
<span>
3941
<brackets v-if="node.type !== 'content'" :data="node.content" @click="handleBracketsClick" />

0 commit comments

Comments
 (0)