|
3 | 3 | :data-json-tree-node-deep="deep" |
4 | 4 | :style="{ paddingLeft: nodePaddingLeft }"> |
5 | 5 | <!-- 展开和收起两种状态 --> |
6 | | - <i v-text="localCollapse ? '+' : '-'" |
| 6 | + <span |
7 | 7 | :class="{ |
8 | 8 | 'cursor-pointer': true, |
9 | 9 | 'json-tree__toggle': true, |
10 | 10 | 'json-tree__toggle--hidden': shouldHideToggle |
11 | 11 | }" |
12 | 12 | @click.stop="onToggle"> |
13 | | - </i> |
| 13 | + <slot name="toggle" v-bind:collapse="localCollapse"> |
| 14 | + <i v-text="localCollapse ? '+' : '-'"></i> |
| 15 | + </slot> |
| 16 | + </span> |
14 | 17 | <div :class="{ |
15 | 18 | 'json-tree__content': true, |
16 | 19 | 'json-tree__content--collapse': localCollapse |
|
30 | 33 | :class="shouldHideToggle ? '' : 'cursor-pointer'" |
31 | 34 | @click.stop="onToggle"> |
32 | 35 | </span> |
33 | | - <span v-text="cntTip" class="json-tree__cnt-tips"></span> |
| 36 | + <span class="json-tree__cnt-tips"> |
| 37 | + <slot name="count" |
| 38 | + v-bind:count="childCnt" |
| 39 | + v-bind:type="jsonDataType" |
| 40 | + v-text="cntTip"> |
| 41 | + </slot> |
| 42 | + </span> |
34 | 43 | </template> |
35 | 44 |
|
36 | 45 | <template v-else-if="jsonDataType === 'object'"> |
|
39 | 48 | :class="shouldHideToggle ? '' : 'cursor-pointer'" |
40 | 49 | @click.stop="onToggle"> |
41 | 50 | </span> |
42 | | - <span v-text="cntTip" class="json-tree__cnt-tips"></span> |
| 51 | + <span class="json-tree__cnt-tips"> |
| 52 | + <slot name="count" |
| 53 | + v-bind:count="childCnt" |
| 54 | + v-bind:type="jsonDataType" |
| 55 | + v-text="cntTip"> |
| 56 | + </slot> |
| 57 | + </span> |
43 | 58 | </template> |
44 | 59 | <span v-else v-text="displayedJsonVal" |
45 | 60 | :class="[ |
|
51 | 66 | <template v-else> |
52 | 67 | <span v-if="jsonDataType === 'array'"> |
53 | 68 | <span class="json-tree__bracket--left">[</span> |
54 | | - <span v-text="cntTip" class="json-tree__cnt-tips"></span> |
| 69 | + <span class="json-tree__cnt-tips"> |
| 70 | + <slot name="count" |
| 71 | + v-bind:count="childCnt" |
| 72 | + v-bind:type="jsonDataType" |
| 73 | + v-text="cntTip"> |
| 74 | + </slot> |
| 75 | + </span> |
55 | 76 | </span> |
56 | 77 | <span v-else-if="jsonDataType === 'object'"> |
57 | 78 | <span v-text="'{'" class="json-tree__brace--left"></span> |
58 | | - <span v-text="cntTip" class="json-tree__cnt-tips"></span> |
| 79 | + <span class="json-tree__cnt-tips"> |
| 80 | + <slot name="count" |
| 81 | + v-bind:count="childCnt" |
| 82 | + v-bind:type="jsonDataType" |
| 83 | + v-text="cntTip"> |
| 84 | + </slot> |
| 85 | + </span> |
59 | 86 | </span> |
60 | 87 | <span v-else v-text="displayedJsonVal" |
61 | 88 | :class="[ |
|
73 | 100 | :json-key="i" |
74 | 101 | :json-keys="[...jsonKeys, i]" |
75 | 102 | :json-data="childData" |
| 103 | + :indent="indent" |
76 | 104 | :deep="deep + 1" |
77 | | - :show-line="showLine" |
78 | | - /> |
| 105 | + :show-line="showLine"> |
| 106 | + <template v-for="(_, slot) of $scopedSlots" |
| 107 | + v-slot:[slot]="scope"> |
| 108 | + <slot :name="slot" v-bind="scope"></slot> |
| 109 | + </template> |
| 110 | + </JsonTreeNode> |
79 | 111 | </template> |
80 | 112 | <div v-if="!localCollapse && ['array', 'object'].includes(jsonDataType)" |
81 | 113 | class="json-tree__content__footer"> |
|
94 | 126 | </template> |
95 | 127 |
|
96 | 128 | <script src="./json-tree-node.js"></script> |
97 | | - |
98 | | -<style lang="scss" src="./json-tree.scss"></style> |
|
0 commit comments