代码之家  ›  专栏  ›  技术社区  ›  Vitor Miranda

Vue。js/Vuetify-基于另一个选择过滤选择数据

  •  11
  • Vitor Miranda  · 技术社区  · 7 年前

    如何过滤数据以根据另一个选择填充一个选择?比如,我从一个选择中选择一个州,第二个选择加载来自该特定州的所有城市。 我正在使用vue。js和vuetify作为框架(带有v-select组件)。我试图设置一个计算属性,但即使从第一个选择中选择,第二个也不会加载数据。

    HTML

    Vue.use(Vuetify);
    
    var app = new Vue({
      el: '#app',
      data() {
        return {
          items: {
            home_id: null,
          },
          support: {
            home_province: '',
          },
          options: {
            opt_province: [{
              text: 'British Columbia',
              value: 1
            }, {
              text: 'Ontario',
              value: 2
            }],
            opt_city: [{
              text: 'Vancouver',
              value: 1,
              dependency: 1
            }, {
              text: 'Surrey',
              value: 1,
              dependency: 1
            }, {
              text: 'London',
              value: 1,
              dependency: 2
            }, {
              text: 'Toronto',
              value: 1,
              dependency: 2
            }]
          }
        }
      },
      computed: {
        filteredData() {
          var city = this.options.opt_city;
          var province = this.support.home_province;
          for (var i = 0; i < city.length; i++) {
            if (city[i].dependency != province.value) {
              city.splice(i);
            }
          }
          return city;
        },
      }
    })
    <script src="https://unpkg.com/vue@2.4.1/dist/vue.js"></script>
    <link href="https://unpkg.com/vuetify/dist/vuetify.min.css" rel="stylesheet" />
    <script src="https://unpkg.com/vuetify/dist/vuetify.min.js"></script>
    <link href='https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons' rel="stylesheet" type="text/css">
    <div id="app">
      <v-app>
        <v-card class="grey lighten-4 elevation-0">
          <v-card-text>
            <v-container fluid>
              <v-layout row wrap>
                <v-flex xs4>
                  <v-flex>
                    <v-subheader>Origin Province</v-subheader>
                  </v-flex>
                  <v-flex>
                    <v-select :items="options.opt_province" v-model="support.home_province" label="Select" class="input-group--focused" single-line>
                    </v-select>
                  </v-flex>
                </v-flex>
                <v-flex xs4>
                  <v-flex>
                    <v-subheader>Origin City</v-subheader>
                  </v-flex>
                  <v-flex>
                    <v-select :items="filteredData" v-model="items.home_id" label="Select" class="input-group--focused" single-line autocomplete>
                    </v-select>
                  </v-flex>
                </v-flex>
              </v-layout>
            </v-container>
          </v-card-text>
        </v-card>
      </v-app>
    </div>

    这里是jsfiddle链接: https://jsfiddle.net/vcmiranda/tkkhwq6m/

    1 回复  |  直到 7 年前
        1
  •  10
  •   Bert Jeffrey Shen    7 年前

    filter 城市选项。

    更改您的 filteredData 计算属性到

    filteredData() {
      let options = this.options.opt_city
      return options.filter(o => o.dependency == this.support.home_province)
    }
    

    已更新 fiddle