Commit ed91d9b0c7d3dcbf2cbc08f4cc53ab950e68f3e2
1 parent
345c6863
update Select
support IE9
Showing
3 changed files
with
49 additions
and
34 deletions
Show diff stats
examples/routers/select.vue
| ... | ... | @@ -193,31 +193,51 @@ |
| 193 | 193 | |
| 194 | 194 | <template> |
| 195 | 195 | <div> |
| 196 | - <i-select v-model="d" filterable style="width: 200px" multiple> | |
| 197 | - <i-option :key="e" v-for="e in uList" :value="e.id" :label="e.name"> | |
| 198 | - <span>{{ e.name }}</span> | |
| 199 | - <span style="float:right;color:#ccc">{{ e.id }}</span> | |
| 200 | - </i-option> | |
| 201 | - </i-select> | |
| 202 | - <p>{{d}}</p> | |
| 203 | - <i-button type="primary" v-on:click="clear">清空</i-button> | |
| 196 | + <Select v-model="model1" style="width:200px"> | |
| 197 | + <Option v-for="item in cityList" :value="item.value" :key="item">{{ item.label }}</Option> | |
| 198 | + </Select> | |
| 199 | + {{ model1 }} | |
| 200 | + <Button @click="set">set</Button> | |
| 201 | + <Button @click="add">add</Button> | |
| 202 | + <Button @click="remove">remove</Button> | |
| 204 | 203 | </div> |
| 205 | 204 | </template> |
| 206 | 205 | <script> |
| 207 | 206 | export default { |
| 208 | 207 | data () { |
| 209 | 208 | return { |
| 210 | - d: [], | |
| 211 | - uList : [ | |
| 212 | - {id:1,name:"中国"}, | |
| 213 | - {id:2,name:"美国"}, | |
| 214 | - {id:3,name:"韩国"} | |
| 215 | - ] | |
| 209 | + cityList: [ | |
| 210 | + { | |
| 211 | + value: 'beijing', | |
| 212 | + label: '北京市' | |
| 213 | + }, | |
| 214 | + { | |
| 215 | + value: 'shanghai', | |
| 216 | + label: '上海市' | |
| 217 | + }, | |
| 218 | + { | |
| 219 | + value: 'shenzhen', | |
| 220 | + label: '深圳市' | |
| 221 | + } | |
| 222 | + ], | |
| 223 | + model1: '' | |
| 216 | 224 | } |
| 217 | 225 | }, |
| 218 | 226 | methods: { |
| 219 | 227 | clear(){ |
| 220 | 228 | this.d = []; |
| 229 | + }, | |
| 230 | + set () { | |
| 231 | + this.model1 = 'shenzhen'; | |
| 232 | + }, | |
| 233 | + add () { | |
| 234 | + this.cityList.push({ | |
| 235 | + value: 'chongqing', | |
| 236 | + label: '重庆市' | |
| 237 | + }); | |
| 238 | + }, | |
| 239 | + remove () { | |
| 240 | + this.cityList.splice(0, 1); | |
| 221 | 241 | } |
| 222 | 242 | } |
| 223 | 243 | } | ... | ... |
src/components/select/option.vue
| ... | ... | @@ -65,12 +65,16 @@ |
| 65 | 65 | }, |
| 66 | 66 | mounted () { |
| 67 | 67 | this.searchLabel = this.$el.innerHTML; |
| 68 | + this.dispatch('iSelect', 'append'); | |
| 68 | 69 | this.$on('on-select-close', () => { |
| 69 | 70 | this.isFocus = false; |
| 70 | 71 | }); |
| 71 | 72 | this.$on('on-query-change', (val) => { |
| 72 | 73 | this.queryChange(val); |
| 73 | 74 | }); |
| 75 | + }, | |
| 76 | + beforeDestroy () { | |
| 77 | + this.dispatch('iSelect', 'remove'); | |
| 74 | 78 | } |
| 75 | 79 | }; |
| 76 | 80 | </script> | ... | ... |
src/components/select/select.vue
| ... | ... | @@ -36,7 +36,7 @@ |
| 36 | 36 | import Icon from '../icon'; |
| 37 | 37 | import Drop from './dropdown.vue'; |
| 38 | 38 | import clickoutside from '../../directives/clickoutside'; |
| 39 | - import { oneOf, MutationObserver, findComponentDownward } from '../../utils/assist'; | |
| 39 | + import { oneOf, findComponentDownward } from '../../utils/assist'; | |
| 40 | 40 | import { t } from '../../locale'; |
| 41 | 41 | import Emitter from '../../mixins/emitter'; |
| 42 | 42 | |
| ... | ... | @@ -506,22 +506,16 @@ |
| 506 | 506 | this.updateOptions(true); |
| 507 | 507 | document.addEventListener('keydown', this.handleKeydown); |
| 508 | 508 | |
| 509 | - // watch slot changed | |
| 510 | - // todo 在 child 的 mounted 和 beforeDestroy 里处理 | |
| 511 | - if (MutationObserver) { | |
| 512 | - this.observer = new MutationObserver(() => { | |
| 513 | - this.modelToQuery(); | |
| 514 | - this.slotChange(); | |
| 515 | - this.updateOptions(true, true); | |
| 516 | - }); | |
| 517 | - | |
| 518 | - this.observer.observe(this.$refs.options, { | |
| 519 | -// attributes: true, | |
| 520 | - childList: true, | |
| 521 | - characterData: true, | |
| 522 | - subtree: true | |
| 523 | - }); | |
| 524 | - } | |
| 509 | + this.$on('append', () => { | |
| 510 | + this.modelToQuery(); | |
| 511 | + this.slotChange(); | |
| 512 | + this.updateOptions(true, true); | |
| 513 | + }); | |
| 514 | + this.$on('remove', () => { | |
| 515 | + this.modelToQuery(); | |
| 516 | + this.slotChange(); | |
| 517 | + this.updateOptions(true, true); | |
| 518 | + }); | |
| 525 | 519 | |
| 526 | 520 | this.$on('on-select-selected', (value) => { |
| 527 | 521 | if (this.model === value) { |
| ... | ... | @@ -556,9 +550,6 @@ |
| 556 | 550 | }, |
| 557 | 551 | beforeDestroy () { |
| 558 | 552 | document.removeEventListener('keydown', this.handleKeydown); |
| 559 | - if (this.observer) { | |
| 560 | - this.observer.disconnect(); | |
| 561 | - } | |
| 562 | 553 | }, |
| 563 | 554 | watch: { |
| 564 | 555 | value (val) { | ... | ... |