Vue.js/Vuetify - 根据另一个 select 选择过滤 select 数据
Vue.js/Vuetify - Filter select data based on another select choice
如何过滤数据以根据另一个 select 的选择填充一个 select?比如,我从一个 select 中选择一个州,第二个 select 加载了该特定州的所有城市。
我正在使用 vue.js 和 vuetify 作为框架(使用 v-select 组件)。我尝试设置计算 属性,但即使我从第一个 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 link: https://jsfiddle.net/vcmiranda/tkkhwq6m/
谢谢。
如何过滤数据以根据另一个 select 的选择填充一个 select?比如,我从一个 select 中选择一个州,第二个 select 加载了该特定州的所有城市。 我正在使用 vue.js 和 vuetify 作为框架(使用 v-select 组件)。我尝试设置计算 属性,但即使我从第一个 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 link: https://jsfiddle.net/vcmiranda/tkkhwq6m/
谢谢。