黑马头条vue2.0项目实战(八)——文章评论

server/2024/10/11 13:24:39/

目录

1. 展示文章评论列表

1.1 准备组件

1.2 获取文章评论数据并展示

1.3 展示文章评论总数量

1.4 文章评论项

2. 评论点赞

3. 发布文章评论

3.1 准备弹出层

3.2 封装发布文章评论组件

3.3 请求发布

4. 评论回复

4.1 准备回复弹层

4.2 封装内容组件

4.3 处理头部

4.4 处理当前评论项

4.5 展示评论回复列表

4.6 解决弹层中组件内容不更新问题

4.7 发布回复


1. 展示文章评论列表

1.1 准备组件

为了更好的开发和维护,这里我们把文章评论单独封装到一个组件中来处理。

① 创建 src/views/article/components/article-comment.vue

② 在文章详情页面中加载注册文章评论子组件

③ 在文章详情页面的正文结束后面使用文章评论子组件

1.2 获取文章评论数据并展示

步骤:

  • 封装接口

  • 请求获取数据

  • 处理模板

实现:

① 在 api/comment.js 中添加封装请求方法

② 请求获取数据

  • List 列表组件步骤:
    • 请求获取数据
    • 将数据添加到列表中
    • 数据加载完毕,设置loading
    • 判断是否还有数据
      • 有,获取更新下一页的页码
      • 没有,设置加载状态为结束

③ 模板绑定

1.3 展示文章评论总数量

1.4 文章评论项

① 封装文章评论项子组件

② 在文章评论列表组件的内部使用

③ 模版绑定

2. 评论点赞

① 在 api/comment.js 中添加封装两个数据接口

② 然后给评论项中的点赞图标注册点击事件

③ 处理事件处理函数

  • button 组件的自带 loading 功能

3. 发布文章评论

3.1 准备弹出层

3.2 封装发布文章评论组件

3.3 请求发布

基本思路:

  • 找到数据接口
  • 封装请求方法
  • 注册发布点击事件
    • 请求发布
    • 成功:将发布的内容展示到列表中
    • 失败:提示失败

① 封装数据接口

② 给发布按钮点击事件

③ 事件处理函数

④ 发布成功处理

  •  清空文本框
  • 关闭发布评论的弹层
  • 将最新发布的评论展示到列表的顶部(兄弟组件之间传值,eventBus)
  • 更新文章评论的总数量

4. 评论回复

4.1 准备回复弹层

① 在详情页中使用弹层用来展示文章的回复

  • 在 data 中添加数据用来控制展示回复弹层的显示状态

  • 在详情页中添加使用弹层组件

② 当点击评论项组件中的回复按钮的时候展示弹层

  • comment-item.vue 组件中点击回复按钮的时候,对外发布自定义事件

  • 在详情页组件中使用的位置监听处理
  • 点击回复显示弹出层
  • 传递当前点击回复的评论项

  • 遇到的问题:
    • 把当前的评论对象传递给 reply-comment组件,把当前点击之后展示弹出层的值传递给爷爷组件,让爷爷组件展示回复评论弹出层,但是当一个事件中同时使用两次 $emit触发的其他组件中的事件,可能导致状态更新延迟。
    • 解决方案:只传递当前的评论对象,让控制显示弹出层的变量的状态卸载,$on 事件监听里。

4.2 封装内容组件

  • 标题 narbar 组件
  • 原始评论项,复用之前封装的 comment-item.vue 组件
  • 全部回复标题 cell 单元格组件
  • 回复评论列表,复用之前封装的 article-commment.vue 组件
  • 发表回复评论按钮 button 组件

4.3 处理头部

4.4 处理当前评论项

① 在 comment-item.vue 组件中点击回复按钮的时候把评论对象给传出来

② 在文章详情组件中接收处理

③ 在详情组件中将 currentComment 传递给 comment-reply.vue 组件

④ 在 comment-reply.vue 组件中声明接收

⑤ 在 comment-reply.vue 组件中展示当前评论,复用之前封装的comment-item组件

4.5 展示评论回复列表

基本思路:

  • 回复列表和文章的评论列表几乎是一样的

  • 重用把之前封装的评论列表

4.6 解决弹层中组件内容不更新问题

弹层组件:

  • 如果初始的条件是 false,则弹层的内容不会渲染

  • 程序运行期间,当条件变为 true 的时候,弹层才渲染了内容

  • 之后切换弹层的展示,弹层只是通过 CSS 控制隐藏和显示

弹层渲染出来以后就只是简单的切换显示和隐藏,里面的内容也不再重新渲染了,所以会导致我们的评论的回复列表不会动态更新了。解决办法就是在每次弹层显示的时候重新渲染组件。v-if是条件渲染, true渲染元素节点, false则不渲染元素节点。

4.7 发布回复

  • 复用之前封装的 post-comment.vue 组件

  • 解决无法直接修改属性的问题:

  • 说明:
    • vue 不可以直接修改 props 中的某个对象数据,但是可以定义在 data 中定义一个新的对象数据,让 data 的对象数据和 props 中的这个对象数据指向同一块内存空间, 这样就可以修改 data 中的数据,就可以修改 props 中的这个数据了。

  • 发布回复组件中需要使用 articleId,但是 articleId 是来自于文章详情组件,即文章详情组件是发布回复评论的组件的祖先。这种时候传值的方式只能是 eventBus 或者注入与依赖(provide inject)

  • 但是使用 eventBus 的话,一般是祖先组价中触发了某个事件才能在接收的后代组件中监听到。传递的值在视图中使用了的话,很可能导致视图更新不及时。
  • 所以最好就是采用依赖注入的形式。祖先组件中提供这个贡献的值,后代组件直接注入使用。

祖先组件:

后代组件:


http://www.ppmy.cn/server/100413.html

相关文章

MySQL靶场攻击

靶场搭建 修改配置文件 vim /etc/my.cof [mysqld] secure_file_priv local-infile1 [mysql] local-infile1 安装相关环境 yum install php php-mysql -y 添加配置 vim /etc/httpd/conf/httpd.conf AddType application/x-httpd-php-source .phps AddType application/x-htt…

Spring Boot优缺点

Spring Boot 是一款用于简化Spring应用开发的框架,它集成了大量常用的框架和工具,大大简化了Spring项目的配置和部署。下面是Spring Boot的优缺点: 优点: 简化配置:Spring Boot自动配置功能可以根据应用的依赖自动配…

使用Gitea搭建git本地服务器

前言 作为一个程序员,我认为代码管理是很重要的,在项目开发过程中,随着代码的不断更新迭代,可能已经不知道一开始的代码是什么样子了,又或者时间久了不知道自己改了什么,而git就是一个很好的代码管理工具&a…

SpringBoot快速入门(手动创建)

目录 案例:需求 步骤 1 创建Maven项目 2 导入SpringBoot起步依赖 3 定义Controller 4 编写引导类 案例:需求 搭建简单的SpringBoot工程,创建hello的类定义h1的方法,返回Hello SpringBoot! 步骤 1 创建Maven项目 大家&…

分享|华为测试OD岗面试流程

作者:DLAM 链接:leetcode.cn/circle/discuss/XpySJs/ 抱着试一试的心态,面试了华为的OD岗位,误打误撞进入了总决赛,记录一下给各位友友,流程大概一个月,职级定D3,薪酬22K&#xff0…

fastjson反序列化漏洞

一、漏洞简介 Fastjson是阿里巴巴公司开源的一款高性能的Java语言JSON处理库,广泛应用于Web开发、数据交换等领域。然而,由于Fastjson在解析JSON数据时存在安全漏洞,攻击者可以利用该漏洞执行任意代码,导致严重的安全威胁。 二、…

平安城市/雪亮工程现状及需求分析:EasyCVR视频汇聚平台助力雪亮工程项目建设

一、背景现状 经过近几年的努力,平安城市雪亮工程建设取得了显著的成绩,完成了前端高清视频点位和高清卡口系统建设,建成了(视频监控类)、(卡口类)和(应用类)的平台。这…

003_c语言中怎么逐个获取一个字符串的字符?

【背景】 C中关于字符串的操作比较多,尤其是截取,拼接,组装等功能,那么我们今天就说一下,当我们遇到char str[] "hello world"; char* pstr "Goodthing.."等串的时候,如何去逐个获取…