You don't need to use a prop, you can alternatively call the data into another data variable set using an axios response or any other way you use to pull data into a specified vue component.
You can modify the number 32 below in all places to change the length of text you want to display before and after selecting more/less.
Works with Vue2 & Vue3.
"fw-bold" is a Bootstrap 5 class. It has no affect on this implementation.
props: {
content: Object,
},
data() {
return {
// UX
showComplete: false,
// DATA
shortText: "",
longText: "",
};
},
methods: {
shortenText(body) {
const length = body.length;
if (length >= 32) {
this.shortText = body.slice(0, 32);
this.longText = body.slice(32, -1);
}
},
toggleFull() {
this.showComplete = !this.showComplete;
}
},
created() {
this.shortenText(this.content.body);
},
In the vue template simply do this:
<span>{{ shortText }}</span>
<span v-if="showComplete">{{ longText }}</span>
<span v-if="!showComplete" class="fw-bold" @click="toggleFull"> more...</span>
<span v-if="showComplete" class="fw-bold" @click="toggleFull"> less...</span>