Commit 8f48491aa6efbea3c4a60794c0260a9782048a2f
Committed by
GitHub
Merge pull request #258 from YikaJ/master
Select组件/Tag组件
Showing
4 changed files
with
77 additions
and
44 deletions
Show diff stats
src/components/select/select.vue
| ... | ... | @@ -478,22 +478,25 @@ |
| 478 | 478 | setQuery (query) { |
| 479 | 479 | if (!this.filterable) return; |
| 480 | 480 | this.query = query; |
| 481 | + }, | |
| 482 | + modelToQuery() { | |
| 483 | + if (!this.multiple && this.filterable && this.model) { | |
| 484 | + this.findChild((child) => { | |
| 485 | + if (this.model === child.value) { | |
| 486 | + if (child.label) { | |
| 487 | + this.query = child.label; | |
| 488 | + } else if (child.searchLabel) { | |
| 489 | + this.query = child.searchLabel; | |
| 490 | + } else { | |
| 491 | + this.query = child.value; | |
| 492 | + } | |
| 493 | + } | |
| 494 | + }); | |
| 495 | + } | |
| 481 | 496 | } |
| 482 | 497 | }, |
| 483 | 498 | compiled () { |
| 484 | - if (!this.multiple && this.filterable && this.model) { | |
| 485 | - this.findChild((child) => { | |
| 486 | - if (this.model === child.value) { | |
| 487 | - if (child.label) { | |
| 488 | - this.query = child.label; | |
| 489 | - } else if (child.searchLabel) { | |
| 490 | - this.query = child.searchLabel; | |
| 491 | - } else { | |
| 492 | - this.query = child.value; | |
| 493 | - } | |
| 494 | - } | |
| 495 | - }); | |
| 496 | - } | |
| 499 | + this.modelToQuery(); | |
| 497 | 500 | |
| 498 | 501 | this.updateOptions(true); |
| 499 | 502 | document.addEventListener('keydown', this.handleKeydown); |
| ... | ... | @@ -501,6 +504,7 @@ |
| 501 | 504 | // watch slot changed |
| 502 | 505 | if (MutationObserver) { |
| 503 | 506 | this.observer = new MutationObserver(() => { |
| 507 | + this.modelToQuery(); | |
| 504 | 508 | this.slotChange(); |
| 505 | 509 | this.updateOptions(true, true); |
| 506 | 510 | }); |
| ... | ... | @@ -521,6 +525,7 @@ |
| 521 | 525 | }, |
| 522 | 526 | watch: { |
| 523 | 527 | model () { |
| 528 | + this.modelToQuery(); | |
| 524 | 529 | if (this.multiple) { |
| 525 | 530 | if (this.slotChangeDuration) { |
| 526 | 531 | this.slotChangeDuration = false; | ... | ... |
src/components/tag/tag.vue
| 1 | 1 | <template> |
| 2 | 2 | <div :class="classes" transition="fade"> |
| 3 | - <span :class="dotClasses" v-if="showDot"></span><span :class="textClasses"><slot></slot></span><Icon v-if="closable" type="ios-close-empty" @click="close"></Icon> | |
| 3 | + <span :class="dotClasses" v-if="showDot"></span><span :class="textClasses"><slot></slot></span><Icon v-if="closable" type="ios-close-empty" @click.stop="close"></Icon> | |
| 4 | 4 | </div> |
| 5 | 5 | </template> |
| 6 | 6 | <script> | ... | ... |
test/routers/select.vue
| 1 | 1 | <template> |
| 2 | 2 | <Row> |
| 3 | 3 | <i-col span="12" style="padding-right:10px"> |
| 4 | - <i-select :model.sync="model11" filterable> | |
| 5 | - <i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option> | |
| 4 | + <i-select :model.sync="model111" filterable> | |
| 5 | + <i-option v-for="item in cityList1" :value="item.value">{{ item.label }}</i-option> | |
| 6 | 6 | </i-select> |
| 7 | 7 | </i-col> |
| 8 | + </Row> | |
| 9 | + <Row> | |
| 10 | + <i-col span="12" style="padding-right:10px"> | |
| 11 | + <i-select :model.sync="model112" filterable> | |
| 12 | + <i-option v-for="item in cityList2" :value="item.value">{{ item.label }}</i-option> | |
| 13 | + </i-select> | |
| 14 | + </i-col> | |
| 15 | + </Row> | |
| 16 | + <Row> | |
| 8 | 17 | <i-col span="12"> |
| 9 | 18 | <i-select :model.sync="model12" filterable multiple> |
| 10 | - <i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option> | |
| 19 | + <i-option v-for="item in cityList1" :value="item.value">{{ item.label }}</i-option> | |
| 11 | 20 | </i-select> |
| 12 | 21 | </i-col> |
| 13 | 22 | </Row> |
| 14 | 23 | </template> |
| 15 | 24 | <script> |
| 25 | +const cityList = [ | |
| 26 | + { | |
| 27 | + value: 'beijing', | |
| 28 | + label: '北京市' | |
| 29 | + }, | |
| 30 | + { | |
| 31 | + value: 'shanghai', | |
| 32 | + label: '上海市' | |
| 33 | + }, | |
| 34 | + { | |
| 35 | + value: 'shenzhen', | |
| 36 | + label: '深圳市' | |
| 37 | + }, | |
| 38 | + { | |
| 39 | + value: 'hangzhou', | |
| 40 | + label: '杭州市' | |
| 41 | + }, | |
| 42 | + { | |
| 43 | + value: 'nanjing', | |
| 44 | + label: '南京市' | |
| 45 | + }, | |
| 46 | + { | |
| 47 | + value: 'chongqing', | |
| 48 | + label: '重庆市' | |
| 49 | + } | |
| 50 | +] | |
| 16 | 51 | export default { |
| 17 | 52 | data () { |
| 18 | 53 | return { |
| 19 | - cityList: [ | |
| 20 | - { | |
| 21 | - value: 'beijing', | |
| 22 | - label: '北京市' | |
| 23 | - }, | |
| 24 | - { | |
| 25 | - value: 'shanghai', | |
| 26 | - label: '上海市' | |
| 27 | - }, | |
| 28 | - { | |
| 29 | - value: 'shenzhen', | |
| 30 | - label: '深圳市' | |
| 31 | - }, | |
| 32 | - { | |
| 33 | - value: 'hangzhou', | |
| 34 | - label: '杭州市' | |
| 35 | - }, | |
| 36 | - { | |
| 37 | - value: 'nanjing', | |
| 38 | - label: '南京市' | |
| 39 | - }, | |
| 40 | - { | |
| 41 | - value: 'chongqing', | |
| 42 | - label: '重庆市' | |
| 43 | - } | |
| 44 | - ], | |
| 45 | - model11: '', | |
| 54 | + cityList1: cityList, | |
| 55 | + model111: '', | |
| 56 | + | |
| 57 | + cityList2: [], | |
| 58 | + model112: 'beijing', | |
| 59 | + | |
| 46 | 60 | model12: [] |
| 47 | 61 | } |
| 62 | + }, | |
| 63 | + ready() { | |
| 64 | + this.model111 = 'hangzhou' | |
| 65 | + setTimeout(()=>{ | |
| 66 | + this.cityList2 = cityList | |
| 67 | + }, 500) | |
| 48 | 68 | } |
| 49 | 69 | } |
| 50 | 70 | </script> | ... | ... |
test/routers/tag.vue
| ... | ... | @@ -40,6 +40,8 @@ |
| 40 | 40 | <i-button @click="loading = true">true</i-button> |
| 41 | 41 | <i-button @click="loading = false">false</i-button> |
| 42 | 42 | </Modal> |
| 43 | + <br><br> | |
| 44 | + <Tag type="border" color="yellow" closable @click="clickTag" @on-close="clickTagClose">标签一</Tag> | |
| 43 | 45 | </template> |
| 44 | 46 | <script> |
| 45 | 47 | import { Tag, Modal, iButton } from 'iview'; |
| ... | ... | @@ -56,6 +58,12 @@ |
| 56 | 58 | setTimeout(() => { |
| 57 | 59 | this.modal1 = false; |
| 58 | 60 | }, 2000); |
| 61 | + }, | |
| 62 | + clickTag() { | |
| 63 | + console.log('click tag'); | |
| 64 | + }, | |
| 65 | + clickTagClose() { | |
| 66 | + console.log('click tag close-icon'); | |
| 59 | 67 | } |
| 60 | 68 | } |
| 61 | 69 | } | ... | ... |