我在Web Api中有方法加载第一个选择并加载第二个选择,但第二个有一个参数从第一个选择传递它。
第二个网址如下所示:http://localhost:58209/api/Tecnico/Tanque/?estacionid=@parameter
确定。我在前端使用Vuetify,并尝试加载第二个v-select,我使用:
<v-flex xs12 sm8 md6>
<v-select autocomplete :items="itemsEstacion" item-text="numeroEstacion" item-value="estacionID" prepend-icon="local_gas_station" :loading="loading" label="Seleccionar Destino" v-model="selectEstacion"></v-select>
</v-flex>
<v-flex xs12 sm8 md6>
<v-select autocomplete :items="itemsTanque" v-model="selectTanque" item-text="NumTanque" item-value="ID" v-on:change="cargarTanques(itemsEstacion.estacionID)" prepend-icon="opacity" label="Seleccionar Tanque"></v-select>
</v-flex>
在data() return{}
我有:
selectEstacion: "",
selectTanque: null,
itemsEstacion: [],
itemsTanque: [],
这些是我的方法: - 对于第一个选择
cargarEstaciones() {
this.loading = true;
axios
.get("GetEstaciones", {
headers: {
Authorization: "Bearer " + localStorage.getItem("token")
}
})
.then(response => {
this.loading = false;
console.log(response);
this.itemsEstacion = response.data;
//this.snackbar = true;
//this.textSnackbar = "Se han cargado correctamente las estaciones";
})
.catch(error => {
this.loading = false;
if (error.response.status != null) {
switch (error.response.status) {
case 204:
this.snackbar = true;
this.textSnackbar = error.response.data;
break;
}
}
});
},
- 对于第二个选择:
cargarTanques(estacionID) {
axios
.get("Tecnico/Tanque/?estacionID=" + estacionID, {
headers: {
Authorization: "Bearer " + localStorage.getItem("token")
}
})
.then(response => {
console.log(response);
this.itemsTanque = response.data;
})
.catch(error => {
if (error.response.status != null) {
switch (error.response.status) {
case 404:
this.snackbar = true;
this.textSnackbar = error.response.data;
break;
case 500:
this.snackbar = true;
this.textSnackbar = error.response.data;
}
}
});
},
为了处理这个事件,我把它放在watch:{}
selectEstacion: function() {
this.cargarTanques(this.itemsEstacion.estacionID);
}
但参数未定义,总是如此。 而v-on:改变它不起作用,所以我改用watch()。
谢谢
答案 0 :(得分:0)
itemsEstacion
是一个数组,这就是itemsEstacion.estacionID
始终未定义的原因。
我已更改了您的代码,将v-on:change="cargarTanques"
移至首选。
<v-flex xs12 sm8 md6>
<v-select
autocomplete
:items="itemsEstacion"
item-text="numeroEstacion"
item-value="estacionID"
prepend-icon="local_gas_station"
:loading="loading"
label="Seleccionar Destino"
v-on:change="cargarTanques"
v-model="selectEstacion">
</v-select>
</v-flex>
<v-flex xs12 sm8 md6>
<v-select
autocomplete
:items="itemsTanque"
v-model="selectTanque"
item-text="NumTanque"
item-value="ID"
prepend-icon="opacity"
label="Seleccionar Tanque">
</v-select>
</v-flex>
cargarTanques() {
axios
.get("Tecnico/Tanque/?estacionID=" + this.itemsEstacion.estacionID, {
headers: {
Authorization: "Bearer " + localStorage.getItem("token")
}
})
.then(response => {
console.log(response);
this.itemsTanque = response.data;
})
.catch(error => {
if (error.response.status != null) {
switch (error.response.status) {
case 404:
this.snackbar = true;
this.textSnackbar = error.response.data;
break;
case 500:
this.snackbar = true;
this.textSnackbar = error.response.data;
}
}
});
}