Commit ea3648b3c2d201bbecd056cf5edf70945550eb36

Authored by 梁灏
1 parent 1a97aa89

update Select

examples/routers/select.vue
1 1 <template>
2   - <div>
3   - <Select v-model="model1" style="width:200px">
4   - <Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
  2 + <Row>
  3 + <Col span="12" style="padding-right:10px">
  4 + <Select
  5 + v-model="model13"
  6 + filterable
  7 + remote
  8 + :remote-method="remoteMethod1"
  9 + :loading="loading1">
  10 + <Option v-for="(option, index) in options1" :value="option.value" :key="index">{{option.label}}</Option>
5 11 </Select>
6   -
7   - <Select v-model="model2" multiple style="width:200px">
8   - <Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
  12 + </Col>
  13 + <Col span="12">
  14 + <Select
  15 + v-model="model14"
  16 + multiple
  17 + filterable
  18 + remote
  19 + :remote-method="remoteMethod2"
  20 + :loading="loading2">
  21 + <Option v-for="(option, index) in options2" :value="option.value" :key="index">{{option.label}}</Option>
9 22 </Select>
10   -
11   - <Button type="primary" @click="changeData">changeData</Button>
12   - </div>
  23 + </Col>
  24 + </Row>
13 25 </template>
14 26 <script>
15 27 export default {
16 28 data () {
17 29 return {
18   - cityList: [
19   - {
20   - value: 'New York',
21   - label: 'New York'
22   - },
23   - {
24   - value: 'London',
25   - label: 'London'
26   - },
27   - {
28   - value: 'Sydney',
29   - label: 'Sydney'
30   - },
31   - {
32   - value: 'Ottawa',
33   - label: 'Ottawa'
34   - },
35   - {
36   - value: 'Paris',
37   - label: 'Paris'
38   - },
39   - {
40   - value: 'Canberra',
41   - label: 'Canberra'
42   - }
43   - ],
44   - model1: '',
45   - model2: []
  30 + model13: '',
  31 + loading1: false,
  32 + options1: [],
  33 + model14: [],
  34 + loading2: false,
  35 + options2: [],
  36 + list: ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New hampshire', 'New jersey', 'New mexico', 'New york', 'North carolina', 'North dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode island', 'South carolina', 'South dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West virginia', 'Wisconsin', 'Wyoming']
46 37 }
47 38 },
48 39 methods: {
49   - changeData() {
50   - this.model2.push('Canberra')
  40 + remoteMethod1 (query) {
  41 + if (query !== '') {
  42 + this.loading1 = true;
  43 + setTimeout(() => {
  44 + this.loading1 = false;
  45 + const list = this.list.map(item => {
  46 + return {
  47 + value: item,
  48 + label: item
  49 + };
  50 + });
  51 + this.options1 = list.filter(item => item.label.toLowerCase().indexOf(query.toLowerCase()) > -1);
  52 + }, 200);
  53 + } else {
  54 + this.options1 = [];
  55 + }
  56 + },
  57 + remoteMethod2 (query) {
  58 + if (query !== '') {
  59 + this.loading2 = true;
  60 + setTimeout(() => {
  61 + this.loading2 = false;
  62 + const list = this.list.map(item => {
  63 + return {
  64 + value: item,
  65 + label: item
  66 + };
  67 + });
  68 + this.options2 = list.filter(item => item.label.toLowerCase().indexOf(query.toLowerCase()) > -1);
  69 + }, 200);
  70 + } else {
  71 + this.options2 = [];
  72 + }
51 73 }
52 74 }
53 75 }
... ...
src/components/select/select.vue
... ... @@ -761,7 +761,7 @@
761 761 },
762 762 slotOptions(options, old){
763 763 // #4626,当 Options 的 label 更新时,v-model 的值未更新
764   - if (options && options.length && this.values.length) {
  764 + if (options && options.length && this.values.length && !this.multiple) {
765 765 this.values = this.values.map(value => {
766 766 const option = options.find(option => {
767 767 if (!option.componentOptions) return false;
... ...