Commit af7d72b4cc700c76b658b12930da52f0ee2dc8d4
1 parent
6ff0e340
update Tree selected
Showing
2 changed files
with
117 additions
and
70 deletions
Show diff stats
examples/routers/tree.vue
... | ... | @@ -94,16 +94,122 @@ |
94 | 94 | <!--</script>--> |
95 | 95 | |
96 | 96 | |
97 | +<!--<template>--> | |
98 | + <!--<div style="width: 400px;">--> | |
99 | + <!--<Tree :data="data4" :render="renderContent"></Tree>--> | |
100 | + <!--</div>--> | |
101 | +<!--</template>--> | |
102 | +<!--<script>--> | |
103 | + <!--export default {--> | |
104 | + <!--data () {--> | |
105 | + <!--return {--> | |
106 | + <!--data4: [--> | |
107 | + <!--{--> | |
108 | + <!--title: 'parent 1',--> | |
109 | + <!--expand: true,--> | |
110 | + <!--children: [--> | |
111 | + <!--{--> | |
112 | + <!--title: 'parent 1-1',--> | |
113 | + <!--expand: true,--> | |
114 | + <!--children: [--> | |
115 | + <!--{--> | |
116 | + <!--title: 'leaf 1-1-1',--> | |
117 | + <!--expand: true--> | |
118 | + <!--},--> | |
119 | + <!--{--> | |
120 | + <!--title: 'leaf 1-1-2',--> | |
121 | + <!--expand: true--> | |
122 | + <!--}--> | |
123 | + <!--]--> | |
124 | + <!--},--> | |
125 | + <!--{--> | |
126 | + <!--title: 'parent 1-2',--> | |
127 | + <!--expand: true,--> | |
128 | + <!--children: [--> | |
129 | + <!--{--> | |
130 | + <!--title: 'leaf 1-2-1',--> | |
131 | + <!--expand: true--> | |
132 | + <!--},--> | |
133 | + <!--{--> | |
134 | + <!--title: 'leaf 1-2-1',--> | |
135 | + <!--expand: true--> | |
136 | + <!--}--> | |
137 | + <!--]--> | |
138 | + <!--}--> | |
139 | + <!--]--> | |
140 | + <!--}--> | |
141 | + <!--],--> | |
142 | + <!--buttonProps: {--> | |
143 | + <!--type: 'ghost',--> | |
144 | + <!--size: 'small',--> | |
145 | + <!--}--> | |
146 | + <!--}--> | |
147 | + <!--},--> | |
148 | + <!--methods: {--> | |
149 | + <!--renderContent (h, { data, node, root }) {--> | |
150 | + <!--return h('span', {--> | |
151 | + <!--style: {--> | |
152 | + <!--display: 'inline-block',--> | |
153 | + <!--width: '100%'--> | |
154 | + <!--}--> | |
155 | + <!--}, [--> | |
156 | + <!--h('span', data.title),--> | |
157 | + <!--h('span', {--> | |
158 | + <!--style: {--> | |
159 | + <!--display: 'inline-block',--> | |
160 | + <!--float: 'right',--> | |
161 | + <!--marginRight: '32px'--> | |
162 | + <!--}--> | |
163 | + <!--}, [--> | |
164 | + <!--h('Button', {--> | |
165 | + <!--props: Object.assign({}, this.buttonProps, {--> | |
166 | + <!--icon: 'ios-plus-empty'--> | |
167 | + <!--}),--> | |
168 | + <!--style: {--> | |
169 | + <!--marginRight: '8px'--> | |
170 | + <!--},--> | |
171 | + <!--on: {--> | |
172 | + <!--click: () => { this.append(data) }--> | |
173 | + <!--}--> | |
174 | + <!--}),--> | |
175 | + <!--h('Button', {--> | |
176 | + <!--props: Object.assign({}, this.buttonProps, {--> | |
177 | + <!--icon: 'ios-minus-empty'--> | |
178 | + <!--}),--> | |
179 | + <!--on: {--> | |
180 | + <!--click: () => { this.remove(node, data, root) }--> | |
181 | + <!--}--> | |
182 | + <!--})--> | |
183 | + <!--])--> | |
184 | + <!--]);--> | |
185 | + <!--},--> | |
186 | + <!--append (data) {--> | |
187 | + <!--this.$set(data, 'children', [{--> | |
188 | + <!--title: 'appended node',--> | |
189 | + <!--expand: true--> | |
190 | + <!--}]);--> | |
191 | + <!--},--> | |
192 | + <!--remove (node, data, root) {--> | |
193 | + <!--const parentKey = root.find(el => el === node).parent;--> | |
194 | + <!--const parent = root.find(el => el.nodeKey === parentKey).node;--> | |
195 | + <!--const index = parent.children.indexOf(data);--> | |
196 | + <!--parent.children.splice(index, 1);--> | |
197 | + <!--}--> | |
198 | + <!--}--> | |
199 | + <!--}--> | |
200 | +<!--</script>--> | |
201 | + | |
97 | 202 | <template> |
98 | - <div style="width: 400px;"> | |
99 | - <Tree :data="data4" :render="renderContent"></Tree> | |
203 | + <div> | |
204 | + {{ data1 }} | |
205 | + <Tree :data="data1"></Tree> | |
100 | 206 | </div> |
101 | 207 | </template> |
102 | 208 | <script> |
103 | 209 | export default { |
104 | 210 | data () { |
105 | 211 | return { |
106 | - data4: [ | |
212 | + data1: [ | |
107 | 213 | { |
108 | 214 | title: 'parent 1', |
109 | 215 | expand: true, |
... | ... | @@ -113,12 +219,10 @@ |
113 | 219 | expand: true, |
114 | 220 | children: [ |
115 | 221 | { |
116 | - title: 'leaf 1-1-1', | |
117 | - expand: true | |
222 | + title: 'leaf 1-1-1' | |
118 | 223 | }, |
119 | 224 | { |
120 | - title: 'leaf 1-1-2', | |
121 | - expand: true | |
225 | + title: 'leaf 1-1-2' | |
122 | 226 | } |
123 | 227 | ] |
124 | 228 | }, |
... | ... | @@ -127,74 +231,17 @@ |
127 | 231 | expand: true, |
128 | 232 | children: [ |
129 | 233 | { |
130 | - title: 'leaf 1-2-1', | |
131 | - expand: true | |
234 | + title: 'leaf 1-2-1' | |
132 | 235 | }, |
133 | 236 | { |
134 | - title: 'leaf 1-2-1', | |
135 | - expand: true | |
237 | + title: 'leaf 1-2-1' | |
136 | 238 | } |
137 | 239 | ] |
138 | 240 | } |
139 | 241 | ] |
140 | 242 | } |
141 | - ], | |
142 | - buttonProps: { | |
143 | - type: 'ghost', | |
144 | - size: 'small', | |
145 | - } | |
146 | - } | |
147 | - }, | |
148 | - methods: { | |
149 | - renderContent (h, { data, node, root }) { | |
150 | - return h('span', { | |
151 | - style: { | |
152 | - display: 'inline-block', | |
153 | - width: '100%' | |
154 | - } | |
155 | - }, [ | |
156 | - h('span', data.title), | |
157 | - h('span', { | |
158 | - style: { | |
159 | - display: 'inline-block', | |
160 | - float: 'right', | |
161 | - marginRight: '32px' | |
162 | - } | |
163 | - }, [ | |
164 | - h('Button', { | |
165 | - props: Object.assign({}, this.buttonProps, { | |
166 | - icon: 'ios-plus-empty' | |
167 | - }), | |
168 | - style: { | |
169 | - marginRight: '8px' | |
170 | - }, | |
171 | - on: { | |
172 | - click: () => { this.append(data) } | |
173 | - } | |
174 | - }), | |
175 | - h('Button', { | |
176 | - props: Object.assign({}, this.buttonProps, { | |
177 | - icon: 'ios-minus-empty' | |
178 | - }), | |
179 | - on: { | |
180 | - click: () => { this.remove(node, data, root) } | |
181 | - } | |
182 | - }) | |
183 | - ]) | |
184 | - ]); | |
185 | - }, | |
186 | - append (data) { | |
187 | - this.$set(data, 'children', [{ | |
188 | - title: 'appended node', | |
189 | - expand: true | |
190 | - }]); | |
191 | - }, | |
192 | - remove (node, data, root) { | |
193 | - const parentKey = root.find(el => el === node).parent; | |
194 | - const parent = root.find(el => el.nodeKey === parentKey).node; | |
195 | - const index = parent.children.indexOf(data); | |
196 | - parent.children.splice(index, 1); | |
243 | + ] | |
197 | 244 | } |
198 | 245 | } |
199 | 246 | } |
200 | -</script> | |
201 | 247 | \ No newline at end of file |
248 | +</script> | ... | ... |
src/components/tree/tree.vue
... | ... | @@ -147,9 +147,9 @@ |
147 | 147 | }, |
148 | 148 | handleSelect (nodeKey) { |
149 | 149 | const node = this.flatState[nodeKey].node; |
150 | - if (!this.multiple){ // reset selected | |
150 | + if (!this.multiple){ // reset previously selected node | |
151 | 151 | const currentSelectedKey = this.flatState.findIndex(obj => obj.node.selected); |
152 | - if (currentSelectedKey >= 0) this.$set(this.flatState[currentSelectedKey].node, 'selected', false); | |
152 | + if (currentSelectedKey >= 0 && currentSelectedKey !== nodeKey) this.$set(this.flatState[currentSelectedKey].node, 'selected', false); | |
153 | 153 | } |
154 | 154 | this.$set(node, 'selected', !node.selected); |
155 | 155 | ... | ... |