'I need to implement the "Read more" function in some cards in quasar and vue js
I have more than 3 q-cards in quasar that should display more text when the read more button is pressed, but this does it in all the cards and I need it to be individually. And when you press the btn is change to "Show less". Please, someone that can help me to make this better. Here is a part of my code:
template...
<q-card class="card1 text-white col-8 col-sm-6 self-start q-gutter-x-sm">
<q-card-section>
<div class="text-h6">{{ tit8 }}</div>
</q-card-section>
<q-card-section>
{{ p7 }}
</q-card-section>
<q-card-section v-if="showText" class="q-pt-none">
{{ ubikus }} <br />
<a
class="text-green text-h6"
href="#"
>Ubikuss Project</a
>
</q-card-section>
<q-card-actions @click="toggleText">
<q-btn flat label="Show More" />
</q-card-actions>
</q-card>
<q-card
class="card1 text-white col-8 col-sm-6 self-start q-gutter-x-sm">
<q-card-section>
<div class="text-h6">{{ tit9 }}</div>
</q-card-section>
<q-card-section>
{{ p8 }}
</q-card-section>
<q-card-section v-if="showText" class="q-pt-none">
{{ translate}}<br />
<a
class="text-green text-h6"
href="#"
>Translatoria Project</a
>
</q-card-section>
<q-card-actions @click="toggleText">
<q-btn flat label="Show More" />
</q-card-actions>
</q-card>
<q-separator vertical />
<br />
script..
export default defineComponent({
data() {
return {
showText: false
}}
methods: {
toggleText() {
this.showText = !this.showText;
},
},
Solution 1:[1]
You can create loop to display your cards and use index to show/hide:
const app = Vue.createApp({
data() {
return {
projects: [{title: 'aaa', nr: 7, text: 'ubikus', link: 'Ubikuss Project'}, {title: 'bbb', nr: 8, text: 'translate', link: 'Translatoria Project'}, {title: 'ccc', nr: 9, text: 'other', link: 'some'}],
showText: null
}
},
methods: {
toggleText(idx) {
this.showText === idx ? this.showText = null : this.showText = idx
},
},
})
app.use(Quasar)
app.mount('#q-app')
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet" type="text/css">
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/quasar.prod.css" rel="stylesheet" type="text/css">
<div id="q-app">
<div v-for="(project, index) in projects" :key="index">
<q-card class="card1 col-8 col-sm-6 self-start q-gutter-x-sm">
<q-card-section>
<div class="text-h6">{{ project.title }}</div>
</q-card-section>
<q-card-section>
{{ project.nr }}
</q-card-section>
<q-card-section v-if="showText === index" class="q-pt-none">
{{ project.text }} <br />
<a class="text-green text-h6" href="#">{{ project.link }}</a>
</q-card-section>
<q-card-actions @click="toggleText(index)">
<q-btn flat label="Show More" />
</q-card-actions>
</q-card>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.prod.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/quasar.umd.prod.js"></script>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Nikola Pavicevic |