Commit 4aec6a66bbabe979473dbebb9830cea879c1e016

Authored by 梁灏
1 parent 47a7f21d

support Select

support Select
CHANGE.md
... ... @@ -41,3 +41,5 @@ MenuItem 和 Submenu 的 key 改为了 name
41 41 Menu 的 activeKey 改为 activeName,openKeys 改为 openNames
42 42 ### Cascader
43 43 Caspanel 的 sublist 从 prop -> data
  44 +### Select
  45 +model 改为 value,支持 v-model
44 46 \ No newline at end of file
... ...
README.md
... ... @@ -25,7 +25,7 @@
25 25 - [x] Checkbox
26 26 - [x] Switch
27 27 - [ ] Table
28   -- [ ] Select
  28 +- [x] Select
29 29 - [x] Slider
30 30 - [ ] DatePicker
31 31 - [ ] TimePicker
... ...
examples/app.vue
... ... @@ -43,6 +43,7 @@ li + li { border-left: solid 1px #bbb; padding-left: 10px; margin-left: 10px; }
43 43 <li><router-link to="/menu">Menu</router-link></li>
44 44 <li><router-link to="/spin">Spin</router-link></li>
45 45 <li><router-link to="/cascader">Cascader</router-link></li>
  46 + <li><router-link to="/select">Select</router-link></li>
46 47 </ul>
47 48 </nav>
48 49 <router-view></router-view>
... ...
examples/main.js
... ... @@ -136,6 +136,10 @@ const router = new VueRouter({
136 136 {
137 137 path: '/cascader',
138 138 component: require('./routers/cascader.vue')
  139 + },
  140 + {
  141 + path: '/select',
  142 + component: require('./routers/select.vue')
139 143 }
140 144 ]
141 145 });
... ...
examples/routers/select.vue
  1 +<!--<template>-->
  2 + <!--<div>-->
  3 + <!--<i-select v-model="model1" style="width:200px" clearable>-->
  4 + <!--<i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option>-->
  5 + <!--</i-select>-->
  6 + <!--{{ model1 }}-->
  7 + <!--<div @click="c">change</div>-->
  8 + <!--</div>-->
  9 +<!--</template>-->
  10 +<!--<script>-->
  11 + <!--export default {-->
  12 + <!--data () {-->
  13 + <!--return {-->
  14 + <!--cityList: [-->
  15 + <!--{-->
  16 + <!--value: 'beijing',-->
  17 + <!--label: '北京市'-->
  18 + <!--},-->
  19 + <!--{-->
  20 + <!--value: 'shanghai',-->
  21 + <!--label: '上海市'-->
  22 + <!--},-->
  23 + <!--{-->
  24 + <!--value: 'shenzhen',-->
  25 + <!--label: '深圳市'-->
  26 + <!--},-->
  27 + <!--{-->
  28 + <!--value: 'hangzhou',-->
  29 + <!--label: '杭州市'-->
  30 + <!--},-->
  31 + <!--{-->
  32 + <!--value: 'nanjing',-->
  33 + <!--label: '南京市'-->
  34 + <!--},-->
  35 + <!--{-->
  36 + <!--value: 'chongqing',-->
  37 + <!--label: '重庆市'-->
  38 + <!--}-->
  39 + <!--],-->
  40 + <!--model1: ''-->
  41 + <!--}-->
  42 + <!--},-->
  43 + <!--methods: {-->
  44 + <!--c () {-->
  45 + <!--this.model1 = 'hangzhou'-->
  46 + <!--}-->
  47 + <!--}-->
  48 + <!--}-->
  49 +<!--</script>-->
  50 +
  51 +
  52 +<!--<template>-->
  53 + <!--<div>-->
  54 + <!--<i-select v-model="model5" disabled style="width:200px">-->
  55 + <!--<i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option>-->
  56 + <!--</i-select>-->
  57 + <!--<i-select v-model="model6" style="width:200px">-->
  58 + <!--<i-option value="beijing">北京市</i-option>-->
  59 + <!--<i-option value="shanghai" disabled>上海市</i-option>-->
  60 + <!--<i-option value="shenzhen">深圳市</i-option>-->
  61 + <!--</i-select>-->
  62 + <!--</div>-->
  63 +<!--</template>-->
  64 +<!--<script>-->
  65 + <!--export default {-->
  66 + <!--data () {-->
  67 + <!--return {-->
  68 + <!--cityList: [-->
  69 + <!--{-->
  70 + <!--value: 'beijing',-->
  71 + <!--label: '北京市'-->
  72 + <!--},-->
  73 + <!--{-->
  74 + <!--value: 'shanghai',-->
  75 + <!--label: '上海市'-->
  76 + <!--},-->
  77 + <!--{-->
  78 + <!--value: 'shenzhen',-->
  79 + <!--label: '深圳市'-->
  80 + <!--},-->
  81 + <!--{-->
  82 + <!--value: 'hangzhou',-->
  83 + <!--label: '杭州市'-->
  84 + <!--},-->
  85 + <!--{-->
  86 + <!--value: 'nanjing',-->
  87 + <!--label: '南京市'-->
  88 + <!--},-->
  89 + <!--{-->
  90 + <!--value: 'chongqing',-->
  91 + <!--label: '重庆市'-->
  92 + <!--}-->
  93 + <!--],-->
  94 + <!--model5: '',-->
  95 + <!--model6: ''-->
  96 + <!--}-->
  97 + <!--}-->
  98 + <!--}-->
  99 +<!--</script>-->
  100 +
  101 +
  102 +
  103 +<!--<template>-->
  104 + <!--<div>-->
  105 + <!--<i-select v-model="model7" style="width:200px">-->
  106 + <!--<Option-group label="热门城市">-->
  107 + <!--<i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option>-->
  108 + <!--</Option-group>-->
  109 + <!--<Option-group label="其它城市">-->
  110 + <!--<i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option>-->
  111 + <!--</Option-group>-->
  112 + <!--</i-select>-->
  113 + <!--</div>-->
  114 +<!--</template>-->
  115 +<!--<script>-->
  116 + <!--export default {-->
  117 + <!--data () {-->
  118 + <!--return {-->
  119 + <!--cityList: [-->
  120 + <!--{-->
  121 + <!--value: 'beijing',-->
  122 + <!--label: '北京市'-->
  123 + <!--},-->
  124 + <!--{-->
  125 + <!--value: 'shanghai',-->
  126 + <!--label: '上海市'-->
  127 + <!--},-->
  128 + <!--{-->
  129 + <!--value: 'shenzhen',-->
  130 + <!--label: '深圳市'-->
  131 + <!--},-->
  132 + <!--{-->
  133 + <!--value: 'hangzhou',-->
  134 + <!--label: '杭州市'-->
  135 + <!--},-->
  136 + <!--{-->
  137 + <!--value: 'nanjing',-->
  138 + <!--label: '南京市'-->
  139 + <!--},-->
  140 + <!--{-->
  141 + <!--value: 'chongqing',-->
  142 + <!--label: '重庆市'-->
  143 + <!--}-->
  144 + <!--],-->
  145 + <!--model7: ''-->
  146 + <!--}-->
  147 + <!--}-->
  148 + <!--}-->
  149 +<!--</script>-->
  150 +
  151 +<!--<template>-->
  152 + <!--<div>-->
  153 + <!--<i-select v-model="model10" multiple style="width:260px">-->
  154 + <!--<i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option>-->
  155 + <!--</i-select>-->
  156 + <!--</div>-->
  157 +<!--</template>-->
  158 +<!--<script>-->
  159 + <!--export default {-->
  160 + <!--data () {-->
  161 + <!--return {-->
  162 + <!--cityList: [-->
  163 + <!--{-->
  164 + <!--value: 'beijing',-->
  165 + <!--label: '北京市'-->
  166 + <!--},-->
  167 + <!--{-->
  168 + <!--value: 'shanghai',-->
  169 + <!--label: '上海市'-->
  170 + <!--},-->
  171 + <!--{-->
  172 + <!--value: 'shenzhen',-->
  173 + <!--label: '深圳市'-->
  174 + <!--},-->
  175 + <!--{-->
  176 + <!--value: 'hangzhou',-->
  177 + <!--label: '杭州市'-->
  178 + <!--},-->
  179 + <!--{-->
  180 + <!--value: 'nanjing',-->
  181 + <!--label: '南京市'-->
  182 + <!--},-->
  183 + <!--{-->
  184 + <!--value: 'chongqing',-->
  185 + <!--label: '重庆市'-->
  186 + <!--}-->
  187 + <!--],-->
  188 + <!--model10: []-->
  189 + <!--}-->
  190 + <!--}-->
  191 + <!--}-->
  192 +<!--</script>-->
  193 +
1 194 <template>
2   - <Row>
3   - <i-col span="12" style="padding-right:10px">
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>
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>
17   - <i-col span="12">
18   - <i-select :model.sync="model12" filterable multiple>
19   - <i-option v-for="item in cityList1" :value="item.value">{{ item.label }}</i-option>
20   - </i-select>
21   - </i-col>
22   - </Row>
  195 + <div>
  196 + <Row>
  197 + <i-col span="12" style="padding-right:10px">
  198 + <i-select v-model="model11" filterable>
  199 + <i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option>
  200 + </i-select>
  201 + </i-col>
  202 + <i-col span="12">
  203 + <i-select v-model="model12" filterable multiple>
  204 + <i-option v-for="item in cityList" :value="item.value">{{ item.label }}</i-option>
  205 + </i-select>
  206 + </i-col>
  207 + </Row>
  208 + <div @click="model11 = 'shanghai'">change</div>
  209 + </div>
23 210 </template>
24 211 <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   -]
51 212 export default {
52 213 data () {
53 214 return {
54   - cityList1: cityList,
55   - model111: '',
56   -
57   - cityList2: [],
58   - model112: 'beijing',
59   -
  215 + cityList: [
  216 + {
  217 + value: 'beijing',
  218 + label: '北京市'
  219 + },
  220 + {
  221 + value: 'shanghai',
  222 + label: '上海市'
  223 + },
  224 + {
  225 + value: 'shenzhen',
  226 + label: '深圳市'
  227 + },
  228 + {
  229 + value: 'hangzhou',
  230 + label: '杭州市'
  231 + },
  232 + {
  233 + value: 'nanjing',
  234 + label: '南京市'
  235 + },
  236 + {
  237 + value: 'chongqing',
  238 + label: '重庆市'
  239 + }
  240 + ],
  241 + model11: '',
60 242 model12: []
61 243 }
62   - },
63   - ready() {
64   - this.model111 = 'hangzhou'
65   - setTimeout(()=>{
66   - this.cityList2 = cityList
67   - }, 500)
68 244 }
69 245 }
70 246 </script>
... ...
src/components/select/option-group.vue
... ... @@ -2,7 +2,7 @@
2 2 <li :class="[prefixCls + '-wrap']" v-show="!hidden">
3 3 <div :class="[prefixCls + '-title']">{{ label }}</div>
4 4 <ul>
5   - <li :class="[prefixCls]" v-el:options><slot></slot></li>
  5 + <li :class="[prefixCls]" ref="options"><slot></slot></li>
6 6 </ul>
7 7 </li>
8 8 </template>
... ... @@ -10,6 +10,7 @@
10 10 const prefixCls = 'ivu-select-group';
11 11  
12 12 export default {
  13 + name: 'OptionGroup',
13 14 props: {
14 15 label: {
15 16 type: String,
... ... @@ -25,7 +26,7 @@
25 26 methods: {
26 27 queryChange () {
27 28 this.$nextTick(() => {
28   - const options = this.$els.options.querySelectorAll('.ivu-select-item');
  29 + const options = this.$refs.options.querySelectorAll('.ivu-select-item');
29 30 let hasVisibleOption = false;
30 31 for (let i = 0; i < options.length; i++) {
31 32 if (options[i].style.display !== 'none') {
... ... @@ -37,11 +38,11 @@
37 38 });
38 39 }
39 40 },
40   - events: {
41   - 'on-query-change' () {
  41 + mounted () {
  42 + this.$on('on-query-change', () => {
42 43 this.queryChange();
43 44 return true;
44   - }
  45 + });
45 46 }
46 47 };
47 48 </script>
... ...
src/components/select/option.vue
... ... @@ -2,9 +2,14 @@
2 2 <li :class="classes" @click.stop="select" @mouseout.stop="blur" v-show="!hidden"><slot>{{ showLabel }}</slot></li>
3 3 </template>
4 4 <script>
  5 + import Emitter from '../../mixins/emitter';
  6 +
5 7 const prefixCls = 'ivu-select-item';
6 8  
7 9 export default {
  10 + name: 'iOption',
  11 + componentName: 'select-item',
  12 + mixins: [ Emitter ],
8 13 props: {
9 14 value: {
10 15 type: [String, Number],
... ... @@ -18,7 +23,6 @@
18 23 default: false
19 24 }
20 25 },
21   - componentName: 'select-item',
22 26 data () {
23 27 return {
24 28 selected: false,
... ... @@ -49,7 +53,7 @@
49 53 return false;
50 54 }
51 55  
52   - this.$dispatch('on-select-selected', this.value);
  56 + this.dispatch('iSelect', 'on-select-selected', this.value);
53 57 },
54 58 blur () {
55 59 this.isFocus = false;
... ... @@ -59,16 +63,14 @@
59 63 this.hidden = !new RegExp(parsedQuery, 'i').test(this.searchLabel);
60 64 }
61 65 },
62   - compiled () {
  66 + mounted () {
63 67 this.searchLabel = this.$el.innerHTML;
64   - },
65   - events: {
66   - 'on-select-close' () {
  68 + this.$on('on-select-close', () => {
67 69 this.isFocus = false;
68   - },
69   - 'on-query-change' (val) {
  70 + });
  71 + this.$on('on-query-change', (val) => {
70 72 this.queryChange(val);
71   - }
  73 + });
72 74 }
73 75 };
74 76 </script>
... ...
src/components/select/select.vue
... ... @@ -2,11 +2,11 @@
2 2 <div :class="classes" v-clickoutside="handleClose">
3 3 <div
4 4 :class="[prefixCls + '-selection']"
5   - v-el:reference
  5 + ref="reference"
6 6 @click="toggleMenu">
7   - <div class="ivu-tag" v-for="item in selectedMultiple">
  7 + <div class="ivu-tag" v-for="(item, index) in selectedMultiple">
8 8 <span class="ivu-tag-text">{{ item.label }}</span>
9   - <Icon type="ios-close-empty" @click.stop="removeTag($index)"></Icon>
  9 + <Icon type="ios-close-empty" @click.native.stop="removeTag(index)"></Icon>
10 10 </div>
11 11 <span :class="[prefixCls + '-placeholder']" v-show="showPlaceholder && !filterable">{{ placeholder }}</span>
12 12 <span :class="[prefixCls + '-selected-value']" v-show="!showPlaceholder && !multiple && !filterable">{{ selectedSingle }}</span>
... ... @@ -20,31 +20,35 @@
20 20 @blur="handleBlur"
21 21 @keydown="resetInputState"
22 22 @keydown.delete="handleInputDelete"
23   - v-el:input>
24   - <Icon type="ios-close" :class="[prefixCls + '-arrow']" v-show="showCloseIcon" @click.stop="clearSingleSelect"></Icon>
  23 + ref="input">
  24 + <Icon type="ios-close" :class="[prefixCls + '-arrow']" v-show="showCloseIcon" @click.native.stop="clearSingleSelect"></Icon>
25 25 <Icon type="arrow-down-b" :class="[prefixCls + '-arrow']"></Icon>
26 26 </div>
27   - <Dropdown v-show="visible" transition="slide-up" v-ref:dropdown>
28   - <ul v-show="notFound" :class="[prefixCls + '-not-found']"><li>{{ notFoundText }}</li></ul>
29   - <ul v-else :class="[prefixCls + '-dropdown-list']" v-el:options><slot></slot></ul>
30   - </Dropdown>
  27 + <transition name="slide-up">
  28 + <Drop v-show="visible" ref="dropdown">
  29 + <ul v-show="notFound" :class="[prefixCls + '-not-found']"><li>{{ notFoundText }}</li></ul>
  30 + <ul v-show="!notFound" :class="[prefixCls + '-dropdown-list']" ref="options"><slot></slot></ul>
  31 + </Drop>
  32 + </transition>
31 33 </div>
32 34 </template>
33 35 <script>
34 36 import Icon from '../icon';
35   - import Dropdown from './dropdown.vue';
  37 + import Drop from './dropdown.vue';
36 38 import clickoutside from '../../directives/clickoutside';
37 39 import { oneOf, MutationObserver } from '../../utils/assist';
38 40 import { t } from '../../locale';
  41 + import Emitter from '../../mixins/emitter';
39 42  
40 43 const prefixCls = 'ivu-select';
41 44  
42 45 export default {
43 46 name: 'iSelect',
44   - components: { Icon, Dropdown },
  47 + mixins: [ Emitter ],
  48 + components: { Icon, Drop },
45 49 directives: { clickoutside },
46 50 props: {
47   - model: {
  51 + value: {
48 52 type: [String, Number, Array],
49 53 default: ''
50 54 },
... ... @@ -101,7 +105,8 @@
101 105 query: '',
102 106 inputLength: 20,
103 107 notFound: false,
104   - slotChangeDuration: false // if slot change duration and in multiple, set true and after slot change, set false
  108 + slotChangeDuration: false, // if slot change duration and in multiple, set true and after slot change, set false
  109 + model: this.value
105 110 };
106 111 },
107 112 computed: {
... ... @@ -161,7 +166,7 @@
161 166 hideMenu () {
162 167 this.visible = false;
163 168 this.focusIndex = 0;
164   - this.$broadcast('on-select-close');
  169 + this.broadcast('iOption', 'on-select-close');
165 170 },
166 171 // find option component
167 172 findChild (cb) {
... ... @@ -289,10 +294,10 @@
289 294 this.model.splice(index, 1);
290 295  
291 296 if (this.filterable && this.visible) {
292   - this.$els.input.focus();
  297 + this.$refs.input.focus();
293 298 }
294 299  
295   - this.$broadcast('on-update-popper');
  300 + this.broadcast('Drop', 'on-update-popper');
296 301 },
297 302 // to select option for single
298 303 toggleSingleSelected (value, init = false) {
... ... @@ -316,13 +321,15 @@
316 321 value: value,
317 322 label: label
318 323 });
319   - this.$dispatch('on-form-change', {
320   - value: value,
321   - label: label
322   - });
  324 + // todo 事件
  325 +// this.$dispatch('on-form-change', {
  326 +// value: value,
  327 +// label: label
  328 +// });
323 329 } else {
324 330 this.$emit('on-change', value);
325   - this.$dispatch('on-form-change', value);
  331 + // todo 事件
  332 +// this.$dispatch('on-form-change', value);
326 333 }
327 334 }
328 335 }
... ... @@ -351,10 +358,12 @@
351 358 if (!init) {
352 359 if (this.labelInValue) {
353 360 this.$emit('on-change', hybridValue);
354   - this.$dispatch('on-form-change', hybridValue);
355   - } else {
  361 + // todo 事件
  362 +// this.$dispatch('on-form-change', hybridValue);
  363 +// } else {
356 364 this.$emit('on-change', value);
357   - this.$dispatch('on-form-change', value);
  365 + // todo 事件
  366 +// this.$dispatch('on-form-change', value);
358 367 }
359 368 }
360 369 }
... ... @@ -463,7 +472,7 @@
463 472 }, 300);
464 473 },
465 474 resetInputState () {
466   - this.inputLength = this.$els.input.value.length * 12 + 20;
  475 + this.inputLength = this.$refs.input.value.length * 12 + 20;
467 476 },
468 477 handleInputDelete () {
469 478 if (this.multiple && this.model.length && this.query === '') {
... ... @@ -495,7 +504,7 @@
495 504 }
496 505 }
497 506 },
498   - compiled () {
  507 + mounted () {
499 508 this.modelToQuery();
500 509  
501 510 this.updateOptions(true);
... ... @@ -509,13 +518,44 @@
509 518 this.updateOptions(true, true);
510 519 });
511 520  
512   - this.observer.observe(this.$els.options, {
  521 + this.observer.observe(this.$refs.options, {
513 522 // attributes: true,
514 523 childList: true,
515 524 characterData: true,
516 525 subtree: true
517 526 });
518 527 }
  528 +
  529 + this.$on('on-select-selected', (value) => {
  530 + if (this.model === value) {
  531 + this.hideMenu();
  532 + } else {
  533 + if (this.multiple) {
  534 + const index = this.model.indexOf(value);
  535 + if (index >= 0) {
  536 + this.removeTag(index);
  537 + } else {
  538 + this.model.push(value);
  539 + this.broadcast('Drop', 'on-update-popper');
  540 + }
  541 +
  542 + if (this.filterable) {
  543 + this.query = '';
  544 + this.$refs.input.focus();
  545 + }
  546 + } else {
  547 + this.model = value;
  548 +
  549 + if (this.filterable) {
  550 + this.findChild((child) => {
  551 + if (child.value === value) {
  552 + this.query = child.label === undefined ? child.searchLabel : child.label;
  553 + }
  554 + });
  555 + }
  556 + }
  557 + }
  558 + });
519 559 },
520 560 beforeDestroy () {
521 561 document.removeEventListener('keydown', this.handleKeydown);
... ... @@ -524,7 +564,11 @@
524 564 }
525 565 },
526 566 watch: {
  567 + value (val) {
  568 + this.model = val;
  569 + },
527 570 model () {
  571 + this.$emit('input', this.model);
528 572 this.modelToQuery();
529 573 if (this.multiple) {
530 574 if (this.slotChangeDuration) {
... ... @@ -539,18 +583,20 @@
539 583 visible (val) {
540 584 if (val) {
541 585 if (this.multiple && this.filterable) {
542   - this.$els.input.focus();
  586 + this.$refs.input.focus();
543 587 }
544   - this.$broadcast('on-update-popper');
  588 + this.broadcast('Drop', 'on-update-popper');
545 589 } else {
546 590 if (this.filterable) {
547   - this.$els.input.blur();
  591 + this.$refs.input.blur();
548 592 }
549   - this.$broadcast('on-destroy-popper');
  593 + this.broadcast('Drop', 'on-destroy-popper');
550 594 }
551 595 },
552 596 query (val) {
553   - this.$broadcast('on-query-change', val);
  597 + // todo 这里会重复
  598 + this.broadcast('OptionGroup', 'on-query-change', val);
  599 + this.broadcast('iOption', 'on-query-change', val);
554 600 let is_hidden = true;
555 601  
556 602 this.$nextTick(() => {
... ... @@ -561,39 +607,7 @@
561 607 });
562 608 this.notFound = is_hidden;
563 609 });
564   - this.$broadcast('on-update-popper');
565   - }
566   - },
567   - events: {
568   - 'on-select-selected' (value) {
569   - if (this.model === value) {
570   - this.hideMenu();
571   - } else {
572   - if (this.multiple) {
573   - const index = this.model.indexOf(value);
574   - if (index >= 0) {
575   - this.removeTag(index);
576   - } else {
577   - this.model.push(value);
578   - this.$broadcast('on-update-popper');
579   - }
580   -
581   - if (this.filterable) {
582   - this.query = '';
583   - this.$els.input.focus();
584   - }
585   - } else {
586   - this.model = value;
587   -
588   - if (this.filterable) {
589   - this.findChild((child) => {
590   - if (child.value === value) {
591   - this.query = child.label === undefined ? child.searchLabel : child.label;
592   - }
593   - });
594   - }
595   - }
596   - }
  610 + this.broadcast('Drop', 'on-update-popper');
597 611 }
598 612 }
599 613 };
... ...
src/index.js
... ... @@ -43,7 +43,7 @@ import Tooltip from &#39;./components/tooltip&#39;;
43 43 import Tree from './components/tree';
44 44 import Upload from './components/upload';
45 45 import { Row, Col } from './components/grid';
46   -// import { Select, Option, OptionGroup } from './components/select';
  46 +import { Select, Option, OptionGroup } from './components/select';
47 47 import locale from './locale';
48 48  
49 49 const iview = {
... ... @@ -83,8 +83,8 @@ const iview = {
83 83 // Message,
84 84 // Modal,
85 85 // Notice,
86   - // iOption: Option,
87   - // OptionGroup,
  86 + iOption: Option,
  87 + OptionGroup,
88 88 // Page,
89 89 Panel: Collapse.Panel,
90 90 Poptip,
... ... @@ -93,7 +93,7 @@ const iview = {
93 93 RadioGroup: Radio.Group,
94 94 Rate,
95 95 Row,
96   - // iSelect: Select,
  96 + iSelect: Select,
97 97 Slider,
98 98 Spin,
99 99 Step: Steps.Step,
... ...