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,22 +478,25 @@ | ||
478 | setQuery (query) { | 478 | setQuery (query) { |
479 | if (!this.filterable) return; | 479 | if (!this.filterable) return; |
480 | this.query = query; | 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 | compiled () { | 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 | this.updateOptions(true); | 501 | this.updateOptions(true); |
499 | document.addEventListener('keydown', this.handleKeydown); | 502 | document.addEventListener('keydown', this.handleKeydown); |
@@ -501,6 +504,7 @@ | @@ -501,6 +504,7 @@ | ||
501 | // watch slot changed | 504 | // watch slot changed |
502 | if (MutationObserver) { | 505 | if (MutationObserver) { |
503 | this.observer = new MutationObserver(() => { | 506 | this.observer = new MutationObserver(() => { |
507 | + this.modelToQuery(); | ||
504 | this.slotChange(); | 508 | this.slotChange(); |
505 | this.updateOptions(true, true); | 509 | this.updateOptions(true, true); |
506 | }); | 510 | }); |
@@ -521,6 +525,7 @@ | @@ -521,6 +525,7 @@ | ||
521 | }, | 525 | }, |
522 | watch: { | 526 | watch: { |
523 | model () { | 527 | model () { |
528 | + this.modelToQuery(); | ||
524 | if (this.multiple) { | 529 | if (this.multiple) { |
525 | if (this.slotChangeDuration) { | 530 | if (this.slotChangeDuration) { |
526 | this.slotChangeDuration = false; | 531 | this.slotChangeDuration = false; |
src/components/tag/tag.vue
1 | <template> | 1 | <template> |
2 | <div :class="classes" transition="fade"> | 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 | </div> | 4 | </div> |
5 | </template> | 5 | </template> |
6 | <script> | 6 | <script> |
test/routers/select.vue
1 | <template> | 1 | <template> |
2 | <Row> | 2 | <Row> |
3 | <i-col span="12" style="padding-right:10px"> | 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 | </i-select> | 6 | </i-select> |
7 | </i-col> | 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 | <i-col span="12"> | 17 | <i-col span="12"> |
9 | <i-select :model.sync="model12" filterable multiple> | 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 | </i-select> | 20 | </i-select> |
12 | </i-col> | 21 | </i-col> |
13 | </Row> | 22 | </Row> |
14 | </template> | 23 | </template> |
15 | <script> | 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 | export default { | 51 | export default { |
17 | data () { | 52 | data () { |
18 | return { | 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 | model12: [] | 60 | model12: [] |
47 | } | 61 | } |
62 | + }, | ||
63 | + ready() { | ||
64 | + this.model111 = 'hangzhou' | ||
65 | + setTimeout(()=>{ | ||
66 | + this.cityList2 = cityList | ||
67 | + }, 500) | ||
48 | } | 68 | } |
49 | } | 69 | } |
50 | </script> | 70 | </script> |
test/routers/tag.vue
@@ -40,6 +40,8 @@ | @@ -40,6 +40,8 @@ | ||
40 | <i-button @click="loading = true">true</i-button> | 40 | <i-button @click="loading = true">true</i-button> |
41 | <i-button @click="loading = false">false</i-button> | 41 | <i-button @click="loading = false">false</i-button> |
42 | </Modal> | 42 | </Modal> |
43 | + <br><br> | ||
44 | + <Tag type="border" color="yellow" closable @click="clickTag" @on-close="clickTagClose">标签一</Tag> | ||
43 | </template> | 45 | </template> |
44 | <script> | 46 | <script> |
45 | import { Tag, Modal, iButton } from 'iview'; | 47 | import { Tag, Modal, iButton } from 'iview'; |
@@ -56,6 +58,12 @@ | @@ -56,6 +58,12 @@ | ||
56 | setTimeout(() => { | 58 | setTimeout(() => { |
57 | this.modal1 = false; | 59 | this.modal1 = false; |
58 | }, 2000); | 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 | } |