vue里完成一个简单的评论功能,博客必备

效果展示

在这里插入图片描述

comment

步骤

1-表单收集输入信息

<div class="commentorInfo"><div style="position: relative"><i class="fa fa-user"style="position:absolute;top: 50%;transform: translateY(-50%)translateX(8px)"></i><input class="nicknameInput" type="text" placeholder="请输入你的网名..." requiredv-model="form.nickname"></div><div style="position: relative"><i class="fa fa-envelope"style="position:absolute;top: 50%;transform: translateY(-50%)translateX(8px)"></i><input class="emailInput" type="text" placeholder="请输入email(选填)..." v-model="form.email"></div><div style="position: relative"><i class="fa fa-paperclip"style="position:absolute;top: 50%;transform: translateY(-50%)translateX(8px)"></i><input class="urlInput" type="text" placeholder="请输入主页地址(选填)..." v-model="form.url"></div></div><div class="submit"><button @click="submitComment">提交评论</button></div>

2-封装评论组件,遍历数据传入组件内

    <div style="border-radius: 20px;overflow: hidden"><Comment v-for="comment  in comments" :key="comment.id" :comment="comment"/></div>

3-method方法

发表评论后进行刷新,且视口不置顶

  • window.location.reload()

这里我获取评论的调用需依赖article的请求信息,因此放在article请求里的回调函数里

4-data

有些属性是不必要的

 data() {return {article: {},loading: false,limit:5,catelog: [],titlesDoms: [],scrollHandler: null,form: {nickname: '',email: '',url: '',commentContent: '',articleId: null,pid:null,},comments: [],}},

image-20240715150027962

// 获取评论getCommentList() {this.loading = trueconsole.log(this.article.id)selectList(this.article.id, this.limit).then(res => {// console.log(res)if (res.code === 20000) {this.comments = res.data.records}this.loading = false})}

5-Comment组件

<template><div class="commentBox"><div class="commentAvatar"><a :href="comment.url" target="_blank" v-show="comment.url&&comment.email"><img :src="`http://q1.qlogo.cn/g?b=qq&nk=${comment.email.split(`@`)[0]}&s=100`" loading="lazy"></a><img src="../assets/logo.png" v-show="!comment.email" loading="lazy"></div><div class="commentBody"><a class="showNickName" :href="comment.url" target="_blank">{{ comment.nickname }}</a><div class="showComment">{{ comment.commentContent }}{{comment.children}}</div><div class="commentFooter"><div class="commentTime">{{ getTime(comment.createTime) }}</div><div class="thumbUp"><i class="fa fa-thumbs-o-up"></i> 666</div><i class="fa fa-thumbs-o-down thumbDown"></i><button @click="showReplyView(comment.id)">回复</button></div><!--评论回复界面--><div class="replyBox" v-if="currReply===comment.id"><div class="replyAvatar"><img src="../assets/logo.png" alt=""></div><div class="replyMain"><div class="replyInput"><textarea :placeholder="`回复 @${comment.nickname}:`"></textarea></div><div class="replyToolBar"><button class="replyButton">发布</button></div></div></div></div></div>
</template><script>
import common from "@/utils/timestampToTime";export default {name: "Comment",props: ['comment'],data() {return {currReply: null,replyView: false,}},methods: {getTime(time) {return common.timestampToTime(time, 1)},showReplyView(commentId) {if (commentId === this.currReply) {this.currReply = nullreturn}this.currReply = commentId},}
}
</script><style scoped>.commentBox {background: #f3f3f3;padding-top: 30px;display: flex;border-bottom: 1px solid #adadad;}.commentBox img {width: 40px;height: 40px;border-radius: 100%;border: 1px solid rgba(0, 0, 0, 0.3);transition: 0.2s;
}.commentAvatar {padding: 10px 25px;/*flex: 20%;*/}.commentBox img:hover {box-shadow: 0 0 10px rgba(0, 0, 0, 0.6);
}.commentBody {padding: 10px 25px 10px 0;height: 80%;width: 663px;
}.showComment {margin: 25px 0;overflow-wrap: break-word;/*max-width: 556px;*/
}.commentFooter {position: relative;height: 30px;display: flex;align-items: center;color: #707070;
}.replyBox {padding-top: 25px;display: flex;
}.replyAvatar {flex: 8%;padding: 0 15px;
}.replyMain {flex: 92%;
}.replyToolBar {margin-top: 10px;display: flex;justify-content: right;
}.replyButton {padding: 6px 15px;background: #00b4d8;color: #ffffff;border: none;cursor: pointer;border-radius: 5px;
}.replyInput textarea {resize: none;width: 100%;height: 52px;padding: 8px;box-sizing: border-box;border-radius: 5px;border: none;outline: none;
}.showNickName {color: #707070;transition: 0.2s;
}.showNickName:hover {color: #bb0000;
}.commentFooter button {border: none;cursor: pointer;height: 16px;margin-left: 130px;background: transparent;color: #707070;padding: 0;
}.thumbUp {position: absolute;left: 150px;cursor: pointer;
}.thumbDown {position: absolute;left: 210px;cursor: pointer;
}.thumbUp:hover {color: #00b4d8;
}.thumbDown:hover {color: #00b4d8;
}
</style>

使用currRow控制回复输入框的显示与否

遍历comment信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377165.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型诞生过程剖析

过程图如下 &#x1f4da; 第一步&#xff1a;海量文本的无监督学习 得到基座大模型&#x1f389; &#x1f50d; 原料&#xff1a;首先&#xff0c;我们需要海量的文本数据&#xff0c;这些数据可以来自互联网上的各种语料库&#xff0c;包括书籍、新闻、科学论文、社交媒体帖…

Java 客户端操作 Redis 命令(端口号映射方法,命令演示,注意事项)

文章目录 开放端口号问题引入依赖验证连接通用命令使用set 和 get 命令的使用exists 和 del 命令的使用keys 命令的使用expire 和 ttl 命令type 命令的使用 String 类型命令使用mset 和 mget 命令getrange 和 setrange 命令append 命令incr 和 decr 命令 list 类型命令使用lpus…

[极客大挑战 2019]FinalSQL

用异或来注入 注入语句为1是error&#xff0c;为0时为check ?id1^(length(database())5)写盲注脚本 这道题有点坑&#xff0c;首先是表名有两个&#xff0c;一个特别想flag&#xff0c;还有一个就是需要多线程&#xff0c;但是由于是python的&#xff0c;也没有那么必要等一…

CinemachineBrain的属性简介

CinemachineBrain的属性简介 CinemachineBrain是Unity Cinemachine的核心组件&#xff0c;它和Camera组件挂载在一起&#xff0c;监控场景中所有的virtual camera。CinemachineBrain在inspector中暴露的属性如下&#xff1a; Live Camera和Live Blend分别表示当前active的virtu…

51单片机嵌入式开发:9、 STC89C52RC 操作LCD1602技巧

STC89C52RC 操作LCD1602技巧 1 代码工程2 LCD1602使用2.1 LCD1602字库2.2 巧妙使用sprintf2.3 光标显示2.4 写固定长度的字符2.5 所以引入固定长度写入方式&#xff1a; 3 LCD1602操作总结 1 代码工程 承接上文&#xff0c;在原有工程基础上&#xff0c;新建关于lcd1602的c和h…

k8s NetworkPolicy

Namespace 隔离 默认情况下&#xff0c;所有 Pod 之间是全通的。每个 Namespace 可以配置独立的网络策略&#xff0c;来 隔离 Pod 之间的流量。 v1.7 版本通过创建匹配所有 Pod 的 Network Policy 来作为默认的网络策略 默认拒绝所有 Pod 之间 Ingress 通信 apiVersion: …

【线程安全】关于死锁问题

文章目录 死锁的基本概念死锁的四个必要条件避免死锁避免死锁的算法死锁检测算法 死锁的基本概念 死锁是指在一组进程中的各个进程均占有不会释放的资源&#xff0c;但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。当然&#xff0c;线程之间同样也有死…

OpenCV中使用Canny算法在图像中查找边缘

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 算法描述 Canny算法是一种广泛应用于计算机视觉和图像处理领域中的边缘检测算法。它由John F. Canny在1986年提出&#xff0c;旨在寻找给定噪声条件下的最佳边…

部署大语言模型并对话

随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;因其强大的语言理解和生成能力而备受关注。OpenWebUI &#xff0c;原名 Ollama WebUI &#xff0c;是一款专为大语言模型&#xff08;LLM&#xff09;设计的先进 Web 交互…

Facebook的未来蓝图:从元宇宙到虚拟现实的跨越

随着科技的不断演进和社会的数字化转型&#xff0c;虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;作为下一代计算平台正逐渐走进人们的视野。作为全球领先的科技公司之一&#xff0c;Facebook正在积极探索并推动这一领域的发展&#xff0c;以实现其…

【Superset】dashboard 自定义URL

URL设置 在发布仪表盘&#xff08;dashboard&#xff09;后&#xff0c;可以通过修改看板属性中的SLUG等&#xff0c;生成url 举例&#xff1a; http://localhost:8090/superset/dashboard/test/ 参数设置 以下 URL 参数可用于修改仪表板的呈现方式&#xff1a;此处参考了官…

论文翻译 | LEAST-TO-MOST: 从最少到最多的提示使大型语言模型中的复杂推理成为可能

摘要 思维链提示&#xff08;Chain-of-thought prompting&#xff09;在多种自然语言推理任务上展现了卓越的性能。然而&#xff0c;在需要解决的问题比提示中展示的示例更难的任务上&#xff0c;它的表现往往不佳。为了克服从简单到困难的泛化挑战&#xff0c;我们提出了一种新…

请你谈谈:BeanDefinition类作为Spring Bean的建模对象,与BeanFactoryPostProcessor之间的羁绊

那么&#xff0c;我们如何理解Spring Bean的建模对象呢&#xff1f;简而言之&#xff0c;它是指用于描述和配置Bean实例化过程的模型对象。有人可能会提出疑问&#xff0c;既然只需要Class&#xff08;类&#xff09;就可以实例化一个对象&#xff0c;Class作为类的元数据&…

电气工程VR虚拟仿真实训平台以趣味化方式增强吸引力

在工业4.0时代和教育信息化的双重推动下&#xff0c;我们致力于推动实训课件的跨界合作与共创。VR实训课件不仅促进了不同领域、不同行业之间的紧密合作&#xff0c;更让学习变得生动直观。我们凭借3D技术生动、直观、形象的特点&#xff0c;开发了大量配套3D教材&#xff0c;让…

CSS 【实用教程】(2024最新版)

CSS 简介 CSS 是层叠样式表( Cascading Style Sheets ) 的简写&#xff0c;用于精确控制 HTML 页面的样式&#xff0c;以便更好地展示图文信息或产生炫酷/友好的交互体验。 没有必要让所有浏览器都显示得一模一样的&#xff0c;好的浏览器有更好的显示&#xff0c;糟糕的浏览器…

C\C++ 终端输出带有颜色的字符

终端显示带有颜色的字符 终端显示带有颜色的字符 终端显示带有颜色的字符背景&#xff1a;测试机器&#xff0c;win10系统&#xff0c; VS2022编写字体设置不同的颜色背景色光标移动 &#xff08;这个用的估计不是很多&#xff09;字体设置动态显示C cout 也可以测试代码准确的…

【C++】继承(二)

目录 5、继承与友元 6、继承与静态成员 7、复杂的菱形继承和菱形虚拟继承 8、继承的总结与反思 5、继承与友元 友元关系不能继承&#xff0c;也就是说父类的友元不能访问子类的私有或保护的成员 class Student; class Person { public:friend void Display(const Person&a…

.net C# 使用网易163邮箱搭建smtp服务,实现发送邮件功能

功能描述&#xff1a;使用邮箱验证实现用户注册激活和找回密码。邮箱选择网易163作为smtp服务器。 真实测试情况&#xff1a;第一种&#xff1a;大部分服务器运行商的25端口默认是封禁的&#xff0c;可以联系运营商进行25端口解封&#xff0c;解封之后可以使用25端口。第二种&…

【Pytorch】Conda环境下载慢换源/删源/恢复默认源

文章目录 背景临时换源永久换源打开conda配置condarc换源执行配置 命令行修改源添加源查看源 删源恢复默认源使用示范 背景 随着实验增多&#xff0c;需要分割创建环境的情况时有出现&#xff0c;在此情况下使用conda create --name xx python3.10 pytorch torchvision pytorc…

文件读写操作之c语言、c++、windows、MFC、Qt

目录 一、前言 二、c语言文件读写 1.写文件 2.读文件 三、c文件读写 1.写文件 2.读文件 四、windows api文件读写 1.写文件 2.读文件 五、MFC文件读写 1.写文件 2.读文件 六、Qt文件读写 1.写文件 2.读文件 七、总结 一、前言 我们在学习过程中&#xff0c…