I have this code:
<q-expansion-item
default-opened
expand-icon="keyboard_arrow_down"
>
<template v-slot:header>
<div >Today</div>
</template>
<div
v-for="(item, indexItem) in mondayTask"
>
<TaskCard
:items="item"
v-show="item.show"
/></div
></q-expansion-item>
Sometimes there will be no TaskCard shown, so I don't want to show the q-expansion-item
Is there any solution to solve it?
CodePudding user response:
As per my understanding, You want to hide q-expansion-item if show property contains false value in all the objects of mondayTask array. If Yes, checking for mondayTask.length will not work. You have to just check for the show property value in each object with the help of Array.some() method.
Live Demo :
new Vue({
el: '#q-app',
data: {
mondayTask: [{
name: 'Task 1',
show: false
}, {
name: 'Task 2',
show: true
}, {
name: 'Task 3',
show: false
}]
}
})
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/quasar.umd.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/quasar.min.css"/>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material Icons"/>
<div id="q-app">
<q-expansion-item
v-if="mondayTask.some(({ show }) => show)"
default-opened
expand-icon="keyboard_arrow_down"
>
<template v-slot:header>
<div >Today</div>
</template>
<div v-for="(item, indexItem) in mondayTask" :key="indexItem">
<q-card v-show="item.show">
<q-card-section>
{{ item.name }}
</q-card-section>
</q-card>
</div>
</q-expansion-item>
</div>
To play with the above code snippet, Just update the show property value from true to false in the 2nd object of mondayTask data object.
