仿掘金评论区组件开发(二) | 青训营笔记

169 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第4天。

设计及实现思路

全部评论区域

设计思路

  1. 全部的评论信息存储到 comments 数组中 ,以二维数组的形式存储一级二级评论,通过双重循环分别遍历一级二级评论,二级评论挂载到一级评论的下方。
  2. 为一级评论绑定一个点击事件,当点击全部评论的任意区域且发布评论的输入框为空时,将按钮和边框隐藏。
  3. 为一级评论二级评论的点赞,回复图标添加点击事件,实现点击,回复功能。

实现思路

  1. 编写前端页面

    全部评论
    {{item.comment}}
    {{item.like}}
    {{item.commentNum}}
    回复
    {{reply.comment}}
    {{reply.like}}
    回复
      </div>
    </div>
    

全部评论区域共分为两大部分,一级评论区和二级评论区,根据 data 中存储的数据结构,通过 v-for 进行渲染,

一级评论和二级评论的结构大致相同,区别在于二级评论会在评论人名称的后面显示被评论人名称。

  1. 为整个全部评论区域绑定一个点击事件,当点击全部评论区域时,执行 UnShowReplyBtnOne 方法,对发布评论区域的输入框进行判定,决定是否隐藏发布评论按钮。

  2. 通过 v-for 循环遍历 comments 数组中存储的数据,获得的数据中包含一级二级评论信息,一级评论信息存储在数组中的各个对象中,二级评论信息存储在对象中的 reply 数组中,再通过 v-for 循环遍历 reply 数组 即可获取,详细请见前端代码和数据结构代码。

  3. 为一级二级评论区域的回复图标添加一个点击事件,点击回复图标执 showReplyInput(i,name,id) 方法,传入参数分别为当前一级评论的位置 i ,被点击二级评论的用户名和用户ID name,id。将传入的数据存储到对应位置,并根据传入的 i 关闭上一个回复输入框

  4. 为一级二级评论区域的点赞图标添加一个点击事件,点击点赞图标直接增加点赞数,(注:想要其他效果可以自行更改,这里就不详细讲解了)。

  5. 实现评论区域功能相关的 methods

    在评论区输入框为空且点击全部评论区域时,隐藏发布按钮 UnShowReplyBtnOne(){ if (!this.commentThis.replyComment && this.commentThis.btnShow){ this.commentThis.btnShow = false var richInput = document.getElementsByClassName('input-box')[0]; richInput.style.border = "2px solid #fff" } },

当点击全部评论区域时,执行 UnShowReplyBtnOne() 方法,判断 数据replyComment 中是否有数据并且判断 数据btnShow 是否为 true,若 数据replyComment 为空,且 数据btnShow 为true,证明发布评论区的输入框为空且输入框获得焦点,发布评论按钮显示,然后将 btnShow 改为 false,隐藏按钮,并将输入框的边框颜色改为白色。

showReplyInput(i, name, id) {
      //关闭上一个评论的输入框
      this.commentThis.comments[this.commentThis.index].inputShow = false
      //将当前边框返回
      this.commentThis.index = i
      this.commentThis.comments[i].inputShow = true
      this.commentThis.to = name
      this.commentThis.toId = id
    },

当点击回复图标时,执行 showReplyInput(i, name, id) 方法,首先根据数据 index 获取到上一个回复框的位置,并将数据inputShow 改为 false ,将上一个回复框隐藏。然后将传入的参数 i ,name ,in ,分别存入 到回复数据 index ,to,toId 中,然后根据传入 的参数 i 将回复框显示到对应的一级评论中的二级评论列表的最后,即将inputShow改为true。