javascript - Vue.js/Vuetify - 根据另一个选择过滤选择数据

标签 javascript vue.js vuejs2 vuetify.js

如何过滤数据以根据另一个选择的选择填充一个选择?比如,我从一个选择中选择一个州,第二个选择加载了该特定州的所有城市。 我使用 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/

谢谢。

最佳答案

你要做的是filter城市选项。

将您的filteredData 计算属性更改为

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

已更新 fiddle .

关于javascript - Vue.js/Vuetify - 根据另一个选择过滤选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45224973/

相关文章:

javascript - 如何使用 node.js 中的属性过滤 Json 数据

express - 职位发布不会删除,继续获取 id 是 "undefined"

javascript - VueJS如何做这种 "for"循环: for(i = 0; i < x; i++)

javascript - 如何设置要在 vuetify 中固定的工具栏?

symfony - 从 VueJs 组件中受益于 Symfony/Twig i18n

javascript - jquery 在鼠标悬停时淡入淡出

javascript - 优化/分析 CSS/JS 连接

javascript - 如何在 amCharts 上同时显示月份和年份?

javascript - 我如何在 Vue JS 中调用 p5.Vector.fromAngle()?

javascript - 页面刷新后如何获取父组件到子组件的最新数据