Commit 3de47dd15e76a7a79456b70e3656a9eeced03ef3

Authored by Aresn
Committed by GitHub
2 parents 39523a42 cd8f1be8

Merge pull request #4575 from RenShine/2.0

fixed bug #4466 #4300
examples/routers/select.vue
... ... @@ -7,6 +7,8 @@
7 7 <Select v-model="model2" multiple style="width:200px">
8 8 <Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
9 9 </Select>
  10 +
  11 + <Button type="primary" @click="changeData">changeData</Button>
10 12 </div>
11 13 </template>
12 14 <script>
... ... @@ -42,6 +44,11 @@
42 44 model1: '',
43 45 model2: []
44 46 }
  47 + },
  48 + methods: {
  49 + changeData() {
  50 + this.model2.push('Canberra')
  51 + }
45 52 }
46 53 }
47 54 </script>
... ...
src/components/select/select.vue
... ... @@ -135,6 +135,15 @@
135 135 return textContent || (typeof innerHTML === 'string' ? innerHTML : '');
136 136 };
137 137  
  138 + const checkValuesNotEqual = (value,publicValue,values) => {
  139 + const strValue = JSON.stringify(value);
  140 + const strPublic = JSON.stringify(publicValue);
  141 + const strValues = JSON.stringify(values.map( item => {
  142 + return item.value;
  143 + }));
  144 + return strValue !== strPublic || strValue !== strValues || strValues !== strPublic;
  145 + };
  146 +
138 147  
139 148 const ANIMATION_TIMEOUT = 300;
140 149  
... ... @@ -653,12 +662,12 @@
653 662 },
654 663 watch: {
655 664 value(value){
656   - const {getInitialValue, getOptionData, publicValue} = this;
  665 + const {getInitialValue, getOptionData, publicValue, values} = this;
657 666  
658 667 this.checkUpdateStatus();
659 668  
660 669 if (value === '') this.values = [];
661   - else if (JSON.stringify(value) !== JSON.stringify(publicValue)) {
  670 + else if (checkValuesNotEqual(value,publicValue,values)) {
662 671 this.$nextTick(() => this.values = getInitialValue().map(getOptionData).filter(Boolean));
663 672 }
664 673 },
... ...