|
1 | 1 | <template> |
2 | 2 | <div> |
3 | 3 | <div class="layout-padding"> |
4 | | - <p class="caption"> |
5 | | - <span class="desktop-only">Click</span> |
6 | | - <span class="mobile-only">Tap</span> |
7 | | - on items to expand/contract and especially on "Item 1.3" |
8 | | - to trigger an event. |
9 | | - </p> |
10 | | - <p class="caption"> |
11 | | - Trees are stripped out of any design by default so you can |
12 | | - turn them into anything you want. |
13 | | - </p> |
| 4 | + <h1>WIP</h1> |
| 5 | + <div class="row sm-gutter items-center"> |
| 6 | + <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> |
| 7 | + <q-select v-model="selection" :options="[{label: 'None', value: 'none'}, {label: 'Single', value: 'single'}, {label: 'Multiple', value: 'multiple'}]" stack-label="Selection" /> |
| 8 | + </div> |
| 9 | + </div> |
14 | 10 |
|
15 | 11 | <q-tree |
16 | | - :model="treeModel" |
17 | | - contract-html="<i class='material-icons'>remove_circle</i>" |
18 | | - expand-html="<i class='material-icons'>add_circle</i>" |
19 | | - /> |
| 12 | + v-model="treeModel" |
| 13 | + node-key="label" |
| 14 | + :selection="selection" |
| 15 | + @expand="onExpand" |
| 16 | + @select="onSelect" |
| 17 | + > |
| 18 | + <div slot="content-2-1-2-1" slot-scope="prop"> |
| 19 | + Content for 2-1-2-1: {{prop.node.__key}} |
| 20 | + </div> |
| 21 | + </q-tree> |
20 | 22 | </div> |
21 | 23 | </div> |
22 | 24 | </template> |
|
25 | 27 | export default { |
26 | 28 | data () { |
27 | 29 | return { |
| 30 | + selection: 'multiple', |
28 | 31 | treeModel: [ |
29 | 32 | { |
30 | | - title: 'Item 1', |
| 33 | + label: 'Node 1', |
31 | 34 | expanded: true, |
| 35 | + selected: false, |
32 | 36 | icon: 'alarm', |
33 | 37 | children: [ |
34 | 38 | { |
35 | | - title: 'Item 1.1', |
| 39 | + label: 'Node 1.1', |
36 | 40 | expanded: false, |
| 41 | + selected: false, |
37 | 42 | children: [ |
38 | 43 | { |
39 | | - title: 'Item 1.1.1', |
| 44 | + label: 'Node 1.1.1', |
40 | 45 | expanded: false, |
| 46 | + selected: false, |
41 | 47 | children: [ |
42 | 48 | { |
43 | | - title: 'Item 1.1.1.1', |
| 49 | + label: 'Node 1.1.1.1', |
44 | 50 | expanded: false, |
45 | | - children: [] |
| 51 | + selected: false |
46 | 52 | } |
47 | 53 | ] |
48 | 54 | }, |
49 | 55 | { |
50 | | - title: 'Item 1.1.2', |
| 56 | + label: 'Node 1.1.2', |
51 | 57 | expanded: false, |
52 | | - children: [] |
| 58 | + selected: false |
53 | 59 | } |
54 | 60 | ] |
55 | 61 | }, |
56 | 62 | { |
57 | | - title: 'Item 1.2', |
| 63 | + label: 'Node 1.2', |
58 | 64 | expanded: false, |
59 | | - children: [] |
| 65 | + selected: false |
60 | 66 | }, |
61 | 67 | { |
62 | | - title: 'Item 1.3', |
| 68 | + label: 'Node 1.3', |
63 | 69 | expanded: false, |
| 70 | + selected: false, |
64 | 71 | handler: () => { |
65 | | - this.$q.notify('Tapped on item 1.3') |
66 | | - }, |
67 | | - children: [] |
| 72 | + this.$q.notify('Tapped on node 1.3') |
| 73 | + } |
68 | 74 | } |
69 | 75 | ] |
70 | 76 | }, |
71 | 77 | { |
72 | | - title: 'Item 2', |
73 | | - expanded: false, |
| 78 | + label: 'Node 2', |
| 79 | + expanded: true, |
| 80 | + selected: false, |
74 | 81 | children: [ |
75 | 82 | { |
76 | | - title: 'Item 2.1', |
77 | | - expanded: false, |
| 83 | + label: 'Node 2.1', |
| 84 | + expanded: true, |
| 85 | + selected: false, |
78 | 86 | children: [ |
79 | 87 | { |
80 | | - title: 'Item 2.1.1', |
| 88 | + label: 'Node 2.1.1', |
81 | 89 | expanded: false, |
82 | | - children: [] |
| 90 | + selected: false |
83 | 91 | }, |
84 | 92 | { |
85 | | - title: 'Item 2.1.2', |
86 | | - expanded: false, |
| 93 | + label: 'Node 2.1.2', |
| 94 | + expanded: true, |
| 95 | + selected: false, |
87 | 96 | children: [ |
88 | 97 | { |
89 | | - title: 'Item 2.1.2.1', |
90 | | - expanded: false, |
91 | | - children: [] |
| 98 | + label: 'Node 2.1.2.1', |
| 99 | + expanded: true, |
| 100 | + selected: false, |
| 101 | + body: '2-1-2-1' |
92 | 102 | }, |
93 | 103 | { |
94 | | - title: 'Item 2.1.2.2', |
| 104 | + label: 'Node 2.1.2.2', |
95 | 105 | expanded: false, |
96 | | - children: [] |
| 106 | + selected: false, |
| 107 | + header: '2-1-2-2' |
97 | 108 | } |
98 | 109 | ] |
99 | 110 | } |
100 | 111 | ] |
101 | 112 | }, |
102 | 113 | { |
103 | | - title: 'Item 2.2', |
| 114 | + label: 'Node 2.2', |
104 | 115 | expanded: false, |
105 | | - children: [] |
| 116 | + selected: false |
106 | 117 | }, |
107 | 118 | { |
108 | | - title: 'Item 2.3 - Click to add children to it', |
| 119 | + label: 'Node 2.3 - Lazy load', |
109 | 120 | expanded: false, |
110 | | - handler: (item) => { |
111 | | - item.children = [ |
112 | | - { title: 'Item 2.3.1', expanded: false }, |
113 | | - { title: 'Item 2.3.2', expanded: false }, |
114 | | - { title: 'Item 2.3.3', expanded: false }, |
115 | | - { |
116 | | - title: 'Item 2.3.4', |
117 | | - expanded: false, |
118 | | - children: [ |
119 | | - { title: 'Item 2.3.4.1', expanded: false }, |
120 | | - { title: 'Item 2.3.4.2', expanded: false } |
| 121 | + selected: false, |
| 122 | + lazyLoad: node => { |
| 123 | + return new Promise((resolve, reject) => { |
| 124 | + setTimeout(() => { |
| 125 | + node.children = [ |
| 126 | + { label: 'Node 2.3.1', expanded: false }, |
| 127 | + { label: 'Node 2.3.2', expanded: false }, |
| 128 | + { label: 'Node 2.3.3', expanded: false }, |
| 129 | + { |
| 130 | + label: 'Node 2.3.4', |
| 131 | + expanded: false, |
| 132 | + selected: false, |
| 133 | + children: [ |
| 134 | + { label: 'Node 2.3.4.1', expanded: false, selected: true }, |
| 135 | + { label: 'Node 2.3.4.2', expanded: false, selected: false } |
| 136 | + ] |
| 137 | + } |
121 | 138 | ] |
122 | | - } |
123 | | - ] |
124 | | - item.expanded = true |
125 | | - const prevTitle = item.title |
126 | | - const prevHandler = item.handler |
127 | | - item.title = 'Item 2.3 - Click to remove children from it' |
128 | | - item.handler = (item) => { |
129 | | - item.title = prevTitle |
130 | | - delete item.children |
131 | | - item.handler = prevHandler |
132 | | - this.$q.notify('Children removed') |
133 | | - } |
134 | | - this.$q.notify('Children added') |
| 139 | + /* |
| 140 | + const prevLabel = node.label |
| 141 | + const prevHandler = node.handler |
| 142 | + node.label = 'Node 2.3 - Click to remove children from it' |
| 143 | + node.handler = node => { |
| 144 | + node.label = prevLabel |
| 145 | + node.children = [] |
| 146 | + node.handler = prevHandler |
| 147 | + this.$q.notify('Children removed') |
| 148 | + } */ |
| 149 | + this.$q.notify('Children added') |
| 150 | + resolve() |
| 151 | + }, 2000) |
| 152 | + }) |
| 153 | + } |
| 154 | + }, |
| 155 | + { |
| 156 | + label: 'Node 2.4 - Lazy load empty', |
| 157 | + expanded: false, |
| 158 | + selected: false, |
| 159 | + children: [], |
| 160 | + lazyLoad: node => { |
| 161 | + return new Promise((resolve, reject) => { |
| 162 | + setTimeout(() => { |
| 163 | + node.children = [] |
| 164 | + resolve() |
| 165 | + }, 2000) |
| 166 | + }) |
135 | 167 | } |
136 | 168 | } |
137 | 169 | ] |
138 | 170 | } |
139 | 171 | ] |
140 | 172 | } |
| 173 | + }, |
| 174 | + methods: { |
| 175 | + onExpand (node, val) { |
| 176 | + console.log(`@expand(${val})`, node.__key, node) |
| 177 | + }, |
| 178 | + onSelect (node, val) { |
| 179 | + console.log(`@select(${val})`, node.__key, node) |
| 180 | + } |
141 | 181 | } |
142 | 182 | } |
143 | 183 | </script> |
0 commit comments