|
19 | 19 | 'json-tree__content--collapse': localCollapse |
20 | 20 | }" @click.stop="onNodeClick"> |
21 | 21 | <div class="json-tree__content__header"> |
| 22 | + <!-- jsonKey: --> |
22 | 23 | <span v-if="showJsonKey"> |
23 | 24 | <span v-text="jsonKey" :class="[ |
24 | 25 | 'json-tree__key', |
25 | 26 | `json-tree__key--${typeof jsonKey}` |
26 | 27 | ]"></span> |
27 | 28 | <span class="json-tree__colon">:</span> |
28 | 29 | </span> |
| 30 | + |
| 31 | + <!-- json value collapsed --> |
29 | 32 | <template v-if="localCollapse"> |
| 33 | + |
| 34 | + <!-- collapse: array --> |
30 | 35 | <template v-if="jsonDataType === 'array'"> |
31 | 36 | <span v-text="shouldHideToggle ? '[]' : '[...]'" |
32 | 37 | class="json-tree__bracket json-tree__bracket--collapse" |
|
42 | 47 | </span> |
43 | 48 | </template> |
44 | 49 |
|
| 50 | + <!-- collapse: object --> |
45 | 51 | <template v-else-if="jsonDataType === 'object'"> |
46 | 52 | <span v-text="shouldHideToggle ? '{}' : '{...}'" |
47 | 53 | class="json-tree__brace json-tree__brace--collapse" |
|
56 | 62 | </slot> |
57 | 63 | </span> |
58 | 64 | </template> |
59 | | - <span v-else v-text="displayedJsonVal" |
| 65 | + |
| 66 | + <!-- collapse: string / number --> |
| 67 | + <span v-else |
60 | 68 | :class="[ |
61 | 69 | 'json-tree__val', |
62 | 70 | `json-tree__val--${jsonDataType}` |
63 | 71 | ]"> |
| 72 | + <slot name="val" |
| 73 | + v-bind:val="jsonData" |
| 74 | + v-bind:type="jsonDataType">{{ displayedJsonVal }}</slot> |
64 | 75 | </span> |
65 | 76 | </template> |
| 77 | + |
| 78 | + <!-- json value expanded --> |
66 | 79 | <template v-else> |
| 80 | + |
| 81 | + <!-- expand: array --> |
67 | 82 | <span v-if="jsonDataType === 'array'"> |
68 | 83 | <span class="json-tree__bracket--left">[</span> |
69 | 84 | <span class="json-tree__cnt-tips"> |
|
74 | 89 | </slot> |
75 | 90 | </span> |
76 | 91 | </span> |
| 92 | + |
| 93 | + <!-- expand: object --> |
77 | 94 | <span v-else-if="jsonDataType === 'object'"> |
78 | 95 | <span v-text="'{'" class="json-tree__brace--left"></span> |
79 | 96 | <span class="json-tree__cnt-tips"> |
|
84 | 101 | </slot> |
85 | 102 | </span> |
86 | 103 | </span> |
87 | | - <span v-else v-text="displayedJsonVal" |
| 104 | + |
| 105 | + <!-- expand: string / number --> |
| 106 | + <span v-else |
88 | 107 | :class="[ |
89 | 108 | 'json-tree__val', |
90 | 109 | `json-tree__val--${jsonDataType}` |
91 | 110 | ]"> |
| 111 | + <slot name="val" |
| 112 | + v-bind:val="jsonData" |
| 113 | + v-bind:type="jsonDataType">{{ displayedJsonVal }}</slot> |
92 | 114 | </span> |
93 | 115 | </template> |
94 | 116 | </div> |
|
110 | 132 | </template> |
111 | 133 | </JsonTreeNode> |
112 | 134 | </template> |
| 135 | + |
| 136 | + <!-- |
| 137 | + 当且仅当值类型是 array 或 object 且是展开的时候 |
| 138 | + 显示一个收尾的符号: ] 或 } |
| 139 | + --> |
113 | 140 | <div v-if="!localCollapse && ['array', 'object'].includes(jsonDataType)" |
114 | 141 | class="json-tree__content__footer"> |
115 | 142 | <span v-if="jsonDataType === 'array'" |
|
121 | 148 | class="json-tree__brace--right"> |
122 | 149 | </span> |
123 | 150 | </div> |
| 151 | + |
| 152 | + <!-- 层级的连接线 --> |
124 | 153 | <div v-if="showLine" class="json-tree__connector-line"></div> |
125 | 154 | </div> |
126 | 155 | </div> |
|
0 commit comments