File tree Expand file tree Collapse file tree 10 files changed +73
-21
lines changed Expand file tree Collapse file tree 10 files changed +73
-21
lines changed Original file line number Diff line number Diff line change @@ -54,7 +54,8 @@ export default {
54
54
| Attribute | Level | Description | Type | Default |
55
55
| -------- | -------- | -------- | -------- | -------- |
56
56
| data | basic | json data | JSON object | - |
57
- | deep | basic | data depth, data larger than this depth will not be expanded | number | Infinity |
57
+ | deep | basic | data depth, data larger than this depth will not be expanded | number | Infinity |
58
+ | showLength | basic | whether to show the length when closed | boolean | false |
58
59
| path | advanced | root data path | string | root |
59
60
| pathChecked | advanced | defines the selected data path | array | [ ] |
60
61
| pathSelectable | advanced | defines whether a data path supports selection | Function(itemPath, itemData) | - |
Original file line number Diff line number Diff line change @@ -55,6 +55,7 @@ export default {
55
55
| -------- | -------- | -------- | -------- | -------- |
56
56
| data | 基础 | 待美化的源数据,注意不是 ` JSON ` 字符串 | ` JSON ` 对象 | - |
57
57
| deep | 基础 | 数据深度, 大于该深度的数据将不被展开 | number | Infinity |
58
+ | showLength | 基础 | 是否在数据线闭合的时候展示长度 | boolean | false |
58
59
| path | 高级 | 定义最顶层数据层级 | string | root |
59
60
| pathChecked | 高级 | 定义哪些数据层级是已被选中的 | array | [ ] |
60
61
| pathSelectable | 高级 | 定义哪些数据层级是可以被选中的 | Function(itemPath, itemData) | - |
Original file line number Diff line number Diff line change 24
24
25
25
<h3 >Options</h3 >
26
26
<div class =" options" >
27
- <label >selectable-type</label >
28
- <select v-model =" selectableType" >
29
- <option >-</option >
30
- <option >both</option >
31
- <option >checkbox</option >
32
- <option >tree</option >
33
- </select >
34
- <label >path</label >
35
- <input type =" text" v-model =" path" >
27
+ <div >
28
+ <label >selectable-type</label >
29
+ <select v-model =" selectableType" >
30
+ <option >-</option >
31
+ <option >both</option >
32
+ <option >checkbox</option >
33
+ <option >tree</option >
34
+ </select >
35
+ </div >
36
+ <div >
37
+ <label >path</label >
38
+ <input type =" text" v-model =" path" >
39
+ </div >
40
+ <div >
41
+ <label >showLength</label >
42
+ <input type =" checkbox" v-model =" showLength" >
43
+ </div >
44
+ <!-- <div>
45
+ <label>deep</label>
46
+ <select v-model="deep">
47
+ <option :value="2">2</option>
48
+ <option :value="3">3</option>
49
+ <option :value="4">4</option>
50
+ </select>
51
+ </div> -->
36
52
</div >
37
53
38
54
<h3 >Latest Click Result:</h3 >
44
60
<vue-json-pretty
45
61
:data =" json"
46
62
:path =" path"
63
+ :deep =" deep"
64
+ :show-length =" showLength"
47
65
:path-checked =" ['res', 'res.c']"
48
66
:path-selectable =" ((path, data) => typeof data !== 'number')"
49
67
:selectable-type =" selectableType"
@@ -80,12 +98,14 @@ export default {
80
98
}, {
81
99
news_id: 51182 ,
82
100
title: ' Teslamask\' s American Business Relations: The government does not pay billions to build factories' ,
83
- source: ' AI Finance'
101
+ source: ' AI Finance' ,
102
+ members: [' Daniel, Mike, John' ]
84
103
}]
85
104
},
86
105
selectableType: ' both' ,
106
+ showLength: true ,
87
107
path: ' res' ,
88
- deep: 3 ,
108
+ deep: 4 ,
89
109
itemData: {},
90
110
itemPath: ' '
91
111
}
Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " vue-json-pretty" ,
3
- "version" : " 1.3.5 " ,
3
+ "version" : " 1.4.0 " ,
4
4
"description" : " A Vue.js 2.0 Toolkit for JSON" ,
5
5
"author" : " leezng <im.leezng@gmail.com>" ,
6
6
"main" : " vue-json-pretty.js" ,
Original file line number Diff line number Diff line change 18
18
<brackets-left
19
19
:visiable.sync =" visiable"
20
20
:data =" data"
21
+ :show-length =" showLength"
21
22
:not-last-key =" notLastKey" >
22
23
<span v-if =" currentDeep > 1 && !Array.isArray(parentData)" >{{ currentKey }}:</span >
23
24
</brackets-left >
32
33
:parent-data =" data"
33
34
:data =" item"
34
35
:deep =" deep"
36
+ :show-length =" showLength"
35
37
:path =" path + (Array.isArray(data) ? `[${key}]` : `.${key}`)"
36
38
:path-checked =" pathChecked"
37
39
:path-selectable =" pathSelectable"
84
86
type: Number ,
85
87
default: Infinity
86
88
},
89
+ // 是否显示数组|对象的长度
90
+ showLength: {
91
+ type: Boolean ,
92
+ default: false
93
+ },
87
94
// 数据层级顶级路径
88
95
path: {
89
96
type: String ,
171
178
handleMouseout () {
172
179
this .existMouseover && this .selectable && (this .treeContentBackground = ' transparent' )
173
180
},
174
- // 工具函数: 判断是否对象
181
+ // 是否对象
175
182
isObject (value ) {
176
183
return this .getDataType (value) === ' object'
177
184
},
Original file line number Diff line number Diff line change 4
4
<span
5
5
v-show =" dataVisiable"
6
6
class =" vjs__tree__node"
7
- @click.stop =" dataVisiable = !dataVisiable " >
7
+ @click.stop =" toggleBrackets " >
8
8
{{ Array.isArray(data) ? '[' : '{' }}
9
9
</span >
10
10
<span
11
11
v-show =" !dataVisiable"
12
12
class =" vjs__tree__node"
13
- @click.stop =" dataVisiable = !dataVisiable " >
14
- {{ bracketsFormatter(Array.isArray( data) ? '[...]' : '{...}' ) }}
13
+ @click.stop =" toggleBrackets " >
14
+ {{ doubleBracketsGenerator( data) }}
15
15
</span >
16
16
</div >
17
17
</template >
20
20
import bracketsMixin from ' src/mixins/brackets-mixin'
21
21
22
22
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
+ let 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 this .bracketsFormatter (brackets)
40
+ }
41
+ }
24
42
}
25
43
</script >
Original file line number Diff line number Diff line change 2
2
<div v-show =" dataVisiable" >
3
3
<span
4
4
class =" vjs__tree__node"
5
- @click.stop =" dataVisiable = !dataVisiable " >
5
+ @click.stop =" toggleBrackets " >
6
6
{{ bracketsFormatter(Array.isArray(data) ? ']' : '}') }}
7
7
</span >
8
8
</div >
Original file line number Diff line number Diff line change @@ -2,5 +2,5 @@ import App from './components/app.vue'
2
2
import './assets/less/index.less'
3
3
4
4
export default Object . assign ( { } , App , {
5
- version : '1.3.4 '
5
+ version : '1.4.0 '
6
6
} )
Original file line number Diff line number Diff line change @@ -20,6 +20,11 @@ export default {
20
20
}
21
21
} ,
22
22
methods : {
23
+ // 切换括号展开|关闭
24
+ toggleBrackets ( ) {
25
+ this . dataVisiable = ! this . dataVisiable
26
+ } ,
27
+ // 括号优化函数, 若不是最后一项, 自动添加逗号
23
28
bracketsFormatter ( brackets ) {
24
29
return this . notLastKey ? `${ brackets } ,` : brackets
25
30
}
You can’t perform that action at this time.
0 commit comments