javascript - vuejs中的多个嵌套下拉菜单
问题描述
我正在构建一个 Vue SPA,我有这个 vue 元素
var appCataloghi = new Vue({
el: '#appCataloghi',
data: {
cataloghi: oggettoCataloghi.cataloghi,
viaggi: oggettoViaggi,
},
methods: {
popolaViaggi: function() {
}
}
})
oggettoViaggi 是这个 json 对象
'{"viaggiGuidati":[{"nazione":"Spagna","viaggi":[{"id":"1423","nome":"primoviaggioGSpagna"},{"id":"1424","nome":"secondoviaggioGSpagna"}]},{"nazione":"Giappone","viaggi":[{"id":"1523","nome":"scopertadelGiappone"},{"id":"1524","nome":"Giappone"}]}],"itinerari":[{"nazione":"Cina","viaggi":[{"id":"2423","nome":"primoviaggioCina"},{"id":"2424","nome":"secondoviaggioCina"}]},{"nazione":"Lettonia","viaggi":[{"id":"2523","nome":"primoviaggioLettonia"},{"id":"2524","nome":"secondoviaggioLettonia"}]}]}'
和 oggettoCataloghi 是这个 json 对象:
'{"cataloghi":[{"id":"1000","nome":"mete
europee","viaggi":[{"id":"1423","nome":"primoviaggioGSpagna","nazione":"Spagna",
"tipologia" : "Viaggi
guidati"},{"id":"1424","nome":"secondoviaggioGSpagna","nazione":"Spagna",
"tipologia" : "Viaggi guidati"}], "descrizione" : "Viaggi per clienti
amanti del giappone"},{"id":"1001","nome":"viaggi
giappone","viaggi":[{"id":"1523","nome":"scopertadelGiappone","nazione":"Giappone",
"tipologia" :
"Itinerari"},{"id":"1524","nome":"Giappone","nazione":"Giappone",
"tipologia" : "Itinerari"}]}]}'
我想创建一个多依赖下拉菜单,如下图所示
虽然我的 html 结构是:
<div class="viaggi">
<div class="row viaggio" v-for="viaggio in catalogo.viaggi">
<div class="col-xs-12 col-sm-3">
<label class="label">Tipologia:</label>
<select class="inputCatalogo greyInput tipologiaViaggio" v-model="tipologia">
<template v-if="typeof viaggio.id !== 'undefined'">
<option selected>{{viaggio.tipologia}}</option>
</template >
<template v-else>
<option disabled selected>--Scegli tipologia--</option>
<option value="Viaggi guidati">Viaggi guidati</option>
<option value="Itinerari su misura">Itinerari su misura</option>
</template >
</select>
</div>
<div class="col-xs-12 col-sm-3">
<label class="label">Nazione:</label>
<select class="inputCatalogo greyInput nazioneViaggio">
<template v-if="typeof viaggio.id !== 'undefined'">
<option selected>{{viaggio.nazione}}</option>
</template >
<template v-else>
<option disabled selected>--Scegli nazione--</option>
<option v-for="opzioneNazione in viaggio.tipologia">
{{ opzioneNazione.nazione }}
</option>
</template >
</select>
</div>
<div class="col-xs-12 col-sm-5">
<label class="label">Nome del viaggio:</label>
<select class="inputCatalogo greyInput viaggioViaggio">
<template v-if="typeof viaggio.id !== 'undefined'">
<option :value="viaggio.id" selected>{{viaggio.nome}}</option>
</template >
<template v-else>
<option disabled selected>--Scegli viaggio--</option>
</template >
</select>
</div>
<div class="col-xs-12 col-sm-1">
<i class="fa fa-times fa-2x eliminaViaggio" aria-hidden="true"></i>
</div>
</div>
</div>
考虑到我必须为我的 Vue 反对名为 appCataloghi 的每个嵌套下拉菜单执行此操作,我如何知道选择了哪个“Tipologia”?我想我必须在我的 var appCataloghi 中创建一个属性 foreach 下拉列表,但是如何?
我的想法是像这样使用 v-for 进行迭代:v-for="SecondOptions in list.firstOption"
但是,如果第一个选项可以在同一个 var appCataloghi 中有多个选项,我会在哪里保存第一个选项?
解决方案
这就是我解决的方法,我使用了一个索引,然后按索引访问了数组:
<div class="row viaggio" v-for="(viaggio, index) in catalogo.viaggi" :key=viaggio>
<i class="fa fa-times fa-2x eliminaViaggio" @click="eliminaViaggio($event, index,
indiceViaggio)" aria-hidden="true"></i>
...
</div>
我的 JS 中的函数:
eliminaViaggio: function(event, indiceCatalogo, index) {
this.cataloghi[index].viaggi.splice(index, 1);
var clickedElement = event.target.closest('.catalogo');
...
推荐阅读
- c# - 为什么我冻结时间的尝试不起作用?
- android - 如何在 Kotlin 片段内的按钮之间切换片段?
- amazon-web-services - 谁停止和启动 ECS 任务?并通知 ECS 服务
- gradle - 如何将文本文件添加到 Gradle 中的类路径?
- python - 错误在哪里以及如何避免错误字符错误
- javascript - 调用 URL 时对我的 JavaScript 代码感到困惑,不确定是否需要 Ajax 调用
- c - 通过SDL覆盖linux桌面条目中的图标
- android - 刷新时在 textview 上显示文本的字符串数组
- python - python中的heapq模块可以使用哪些类型的堆元素?
- java - 为什么设置新键盘后我的 Android 自定义 KeyboardView 会溢出?