Skip to content

Commit 10f2257

Browse files
committed
#8 增加长度标识,对应属性为 showLength
1 parent 9853977 commit 10f2257

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

src/components/app.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<brackets-left
1919
:visiable.sync="visiable"
2020
:data="data"
21+
:show-length="showLength"
2122
:not-last-key="notLastKey">
2223
<span v-if="currentDeep > 1 && !Array.isArray(parentData)">{{ currentKey }}:</span>
2324
</brackets-left>
@@ -32,6 +33,7 @@
3233
:parent-data="data"
3334
:data="item"
3435
:deep="deep"
36+
:show-length="showLength"
3537
:path="path + (Array.isArray(data) ? `[${key}]` : `.${key}`)"
3638
:path-checked="pathChecked"
3739
:path-selectable="pathSelectable"
@@ -84,6 +86,11 @@
8486
type: Number,
8587
default: Infinity
8688
},
89+
// 是否显示数组|对象的长度
90+
showLength: {
91+
type: Boolean,
92+
default: false
93+
},
8794
// 数据层级顶级路径
8895
path: {
8996
type: String,
@@ -171,7 +178,7 @@
171178
handleMouseout () {
172179
this.existMouseover && this.selectable && (this.treeContentBackground = 'transparent')
173180
},
174-
// 工具函数: 判断是否对象
181+
// 是否对象
175182
isObject (value) {
176183
return this.getDataType(value) === 'object'
177184
},

src/components/brackets-left.vue

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
<span
55
v-show="dataVisiable"
66
class="vjs__tree__node"
7-
@click.stop="dataVisiable = !dataVisiable">
7+
@click.stop="toggleBrackets">
88
{{ Array.isArray(data) ? '[' : '{' }}
99
</span>
1010
<span
1111
v-show="!dataVisiable"
1212
class="vjs__tree__node"
13-
@click.stop="dataVisiable = !dataVisiable">
14-
{{ bracketsFormatter(Array.isArray(data) ? '[...]' : '{...}') }}
13+
@click.stop="toggleBrackets">
14+
{{ doubleBracketsGenerator(data) }}
1515
</span>
1616
</div>
1717
</template>
@@ -20,6 +20,24 @@
2020
import bracketsMixin from 'src/mixins/brackets-mixin'
2121
2222
export default {
23-
mixins: [bracketsMixin]
23+
mixins: [bracketsMixin],
24+
props: {
25+
showLength: Boolean
26+
},
27+
methods: {
28+
// 双括号内容生成器
29+
doubleBracketsGenerator (data) {
30+
const isArray = Array.isArray(data)
31+
const brackets = isArray ? '[...]' : '{...}'
32+
if (this.showLength) {
33+
// 若展示长度, 形如 [...] // 3 items
34+
const text = isArray
35+
? `${data.length} items`
36+
: `${Object.keys(data).length} keys`
37+
brackets += ` // ${text}`
38+
}
39+
return bracketsFormatter(brackets)
40+
}
41+
}
2442
}
2543
</script>

src/components/brackets-right.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div v-show="dataVisiable">
33
<span
44
class="vjs__tree__node"
5-
@click.stop="dataVisiable = !dataVisiable">
5+
@click.stop="toggleBrackets">
66
{{ bracketsFormatter(Array.isArray(data) ? ']' : '}') }}
77
</span>
88
</div>

src/mixins/brackets-mixin.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ export default {
2020
}
2121
},
2222
methods: {
23+
// 切换括号展开|关闭
24+
toggleBrackets () {
25+
this.dataVisiable = !this.dataVisiable
26+
},
27+
// 括号优化函数, 若不是最后一项, 自动添加逗号
2328
bracketsFormatter (brackets) {
2429
return this.notLastKey ? `${brackets},` : brackets
2530
}

0 commit comments

Comments
 (0)