Я пытаюсь показать / скрыть отдельный элемент, так как v-for используется для многих объектов. Раньше у меня было showAeInfo
как логическое, что приводило к тому, что все карты открывались / закрывались при нажатии одной кнопки. Я понял, что мне понадобится массив логических значений, чтобы каждая карта имела свои собственные данные для открытия / свертывания.
Я придумал этот код, однако теперь, когда я нажимаю кнопку, я вижу значение в массиве изменилось, но карта не открылась.
Есть идеи почему? Или есть лучший способ сделать это вместо массива showAeInfo
?
Спасибо!
<template>
<div class="container">
<button class="btn btn-primary" @click="show">Pridaj prídavné zariadenia na túto stavbu</button>
<modal name="addAesToConsite" height="auto" :scrollable="true">
<div class="addAesToCSModalFlex mt-4">
<div class="card mb-2" style="width: 18rem;" v-for="ae in aes" :key="ae.id">
<img :src="ae.imgPath" class="card-img-top">
<div class="card-body">
<h5 class="card-title"><a :href="ae.path">{{ ae.pseudo_id + " - " + ae.name }}</a></h5>
<button class="btn btn-outline-secondary"
@click="showAeInfo[ae.id] = true"
v-show="!showAeInfo[ae.id]">
Zobraz informácie
</button>
<button class="btn btn-outline-secondary" @click="showAeInfo[ae.id] = false" v-show="showAeInfo[ae.id]">
Skry informácie
</button>
<div v-show="showAeInfo[ae.id]">
<p class="card-text"><b>Poloha:</b> {{ aeLocationName(ae.construction_site_id) }}</p>
</div>
<a href="#" class="btn btn-primary">Pridaj toto zariadenie na stavbu</a>
</div>
</div>
</div>
</modal>
</div>
</template>
<script>
export default {
props: {
cs: {
required: true,
type: Object
},
aes: {
required: true,
type: Array
},
machines: {
required: true,
type: Array
},
css: {
required: true,
type: Array
}
},
mounted: function() {
this.setShowAeInfo()
},
created() {
//
},
data: function() {
return {
showAeInfo: []
}
},
methods: {
show() {
this.$modal.show('addAesToConsite');
},
aeLocationName(ae) {
var cs;
if (ae) {
cs = this.css.filter(tcs => tcs.id === ae)[0].name;
return cs;
} else {
return 'Neznáma stavba';
}
},
setShowAeInfo() {
this.aes.forEach(ae => this.showAeInfo.push(false))
this.showAeInfo.push(false);
},
}
}
</script>