- Tested to work on Vue v2, Vue v3 and Nuxt.js
- Support both truncate only or truncate with toggle (more or less)
Install
npm i --save vue-clampFor Nuxt.js, edit nuxt.config.js
export default { build: { transpile: ['vue-clamp', 'resize-detector'] },}Truncate only
<template> <div> <v-clamp :max-lines="2" autoresize>{{ description }}</v-clamp> </div></template><script>import VClamp from 'vue-clampexport default { data() { return { description: "The cactus wren (Campylorhynchus brunneicapillus) is a large wren that is endemic to the deserts of the United States and Mexico. It is the state bird of Arizona. The wren's upperparts are brown with black and white spots and the underparts are cinnamon-buff with a whiter breast; it has striking white eyebrows. The song is loud and raspy. Cactus wrens are ground feeders and eat mainly insects, with some plant material; they can meet their water needs from their diet." } } components: { VClamp }}</script>NOTE: Make sure the parent of v-clamp is not <p>, as <p> can't hold other tags (will trigger The client-side rendered virtual DOM tree is not matching server-rendered content.). If you need v-clamp to be <p>, use tag="p".
Truncate with Toggle
<v-clamp :max-lines="2" autoresize > {{ description }} <template #after="{ toggle, expanded, clamped }"> <a href="#" v-if="expanded || clamped" class="ml-1 badge badge-light" @click.prevent="toggle" >{{ expanded ? 'Less' : 'More' }}</a> </template></v-clamp>