javascript - 如何在 v-for 循环中切片文本并添加阅读更多按钮
问题描述
在“卡片文本”类中,它从 Json 文件中调用文本,但它太长了我想剪切文本并添加动作,点击“阅读更多”按钮,但只有点击的卡片才能做出反应,某人某事?
<template>
<div class="container">
<Modal
v-if="showModal && GET_TRAILER.payload !== null"
v-on:close="closeModal"
:trailerAdress="GET_TRAILER.payload"
></Modal>
<div>
<div class="row" v-for="(obj,index) in GET_MOVIE" :key="index">
<div class="card col-12 col-lg-3" style="width: 10rem;" v-for="movie in obj.payload" :key="movie.id">
<img class="card-img-top" :src="`https://image.tmdb.org/t/p/w500${movie.poster_path}`" />
<div class="card-body">
<h5 class="card-title">{{movie.original_title}}</h5>
<p class="card-text">
{{movie.overview}}
</p>
<div class="buttonPosition">
<button
v-on:click="OpenTrailerModal(movie.id)"
type="button"
class="btn btn-success"
>Watch Trailer</button>
</div>
</div>
</div>
</div>
</div>
<button @click="MoreMovies" type="button" class="btn btn-warning moreBtn">Load More Movies</button>
</div>
</template>
解决方案
在下面试试这个:
<template>
<div class="container">
<Modal
v-if="showModal && GET_TRAILER.payload !== null"
v-on:close="closeModal"
:trailerAdress="GET_TRAILER.payload"
></Modal>
<div>
<div class="row" v-for="(obj,index) in GET_MOVIE" :key="index">
<div class="card col-12 col-lg-3" style="width: 10rem;" v-for="movie in obj.payload" :key="movie.id">
<img class="card-img-top" :src="`https://image.tmdb.org/t/p/w500${movie.poster_path}`" />
<div class="card-body">
<h5 class="card-title">{{movie.original_title}}</h5>
---------------------- Add this part ------------------------------
<div class="card-text">
<p v-if="movie.readMore">
{{ movie.overview | limitDisplay }}
<a v-if="movie.overview.length > 100" @click="toggleReadMore(obj.payload, movie.id, false)">Read More<a>
</p>
<p v-if="!movie.readMore">
{{ movie.overview }}
<a @click="toggleReadMore(true)">Read Less<a>
</p>
</div>
---------------------------------------------------------------
<div class="buttonPosition">
<button
v-on:click="OpenTrailerModal(movie.id)"
type="button"
class="btn btn-success"
>Watch Trailer</button>
</div>
</div>
</div>
</div>
</div>
<button @click="MoreMovies" type="button" class="btn btn-warning moreBtn">Load More Movies</button>
</div>
</template>
在您的脚本中将其添加到您的方法和过滤器中:
methods: {
toggleReadMore(payload, movie_id, value){
payload = payload.map(function(item){
if(item.id == movie_id){
item['readMore'] = value;
return item
}
});
}
},
filters : {
limitDisplay: function(value) {
return value.substring(0, 100) + "...";
}
}
推荐阅读
- r - R plotly:无法更改颜色渐变
- php - php 正在向 file_get_contents 添加反斜杠
- sql - 基于 SQL Server 中键/值对表中的值的重复条目
- vb.net - 为什么VB对话框工具箱中的大多数项目都会被禁用
- javascript - 部分标签是否有类似 onload 的东西?
- c# - 如何在 VRTK 4 Beta (Unity) 中添加来自 VR 控制器的按钮输入?
- json - powershell json转换问题仅在保存到变量时才正确结果
- javascript - 无法刷新数据来自mysql并通过php代码显示的表
- c - 每次我尝试运行它时,带有锁的并发链表都会引发分段错误(核心转储)
- c# - 在 asp.NET MVC 中存储 API 访问密钥的最佳实践