iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue怎么实现文章评论和回复列表
  • 575
分享到

vue怎么实现文章评论和回复列表

2023-06-30 02:06:42 575人浏览 泡泡鱼
摘要

今天小编给大家分享一下Vue怎么实现文章评论和回复列表的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果预览:父组件:<

今天小编给大家分享一下Vue怎么实现文章评论和回复列表的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

效果预览:

vue怎么实现文章评论和回复列表

父组件:

<template>  <div class="comment-reply">    <div      v-for="(item, index) in articleLists"      :key="index"      class="article-list"    >      <div class="article-desc">{{ item.articleDesc }}</div>      <div v-if="item.children.length > 0">        <div class="reply-list" v-if="item.children.length > 0">          <my-cycle-list            v-for="(comment, index) in item.children"            :self="comment"            :parent="comment"            :key="index"          ></my-cycle-list>        </div>      </div>    </div>  </div></template><script>import myCycleList from '@/components/my-cycle-list'export default {  components: { myCycleList },  data() {    return {      // 文章列表      articleLists: [        { articleId: 'article-1', articleDesc: '围城' },        { articleId: 'article-2', articleDesc: '骆驼祥子' },        { articleId: 'article-3', articleDesc: '边城' },        { articleId: 'article-4', articleDesc: '朝花夕拾' }      ],      // 评论列表      commentsList: [        {          userId: 'user-1',          userName: '赵一',          articleId: 'article-1', // 关联的文章id          commentId: 'comment-1', // 评论id          replyId: null, // 回复哪条评论的id          desc: '作者是谁',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-2',          userName: '钱二',          articleId: 'article-1',          commentId: 'comment-2',          replyId: null,          desc: '对呀,作者也不写',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-3',          userName: '孙三',          articleId: 'article-1',          commentId: 'comment-3',          replyId: null,          desc: '楼上俩初中没毕业吧',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-4',          userName: '李四',          articleId: 'article-1',          commentId: 'comment-4',          replyId: 'comment-1',          desc: '作者是钱钟书',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-9',          userName: '牛九',          articleId: 'article-1',          commentId: 'comment-10',          replyId: 'comment-1',          desc: '钱钟书',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-5',          userName: '王五',          articleId: 'article-2',          commentId: 'comment-5',          replyId: null,          desc: '哈哈哈',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-6',          userName: '张六',          articleId: 'article-1',          commentId: 'comment-6',          replyId: 'comment-4',          desc: '不对吧',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-7',          userName: '顾七',          articleId: 'article-1',          commentId: 'comment-7',          replyId: 'comment-6',          desc: '对的,就是钱钟书',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-8',          userName: '朱八',          articleId: 'article-3',          commentId: 'comment-8',          replyId: null,          desc: '这本书真不错',          time: '2021-04-05 15:30:25'        },        {          userId: 'user-9',          userName: '纪九',          articleId: 'article-4',          commentId: 'comment-9',          replyId: null,          desc: '真的好看',          time: '2021-04-05 15:30:25'        }      ]    }  },  created() {    this.initCommentLists()    this.initArticleLists()  },  methods: {    // 格式化评论数据    initCommentLists() {      this.commentsList.forEach(i => {        this.$set(i, 'children', [])        // 将回复该评论的列表放入children中        let filterList = this.commentsList.filter(          j => j.replyId === i.commentId        )        if (filterList.length > 0) {          i.children = filterList        }      })      // 过滤出最高级      this.commentsList = this.commentsList.filter(i => i.replyId === null)    },    // 格式化文章数据    initArticleLists() {      this.articleLists.forEach(i => {        this.$set(i, 'children', [])        let filterList = this.commentsList.filter(          j => j.articleId === i.articleId        )        if (filterList.length > 0) {          i.children = filterList        }      })    }  }}</script><style scoped lang="sCSS">.comment-reply {  .article-list {    margin: 15px;    .article-desc {      color: coral;      font-size: 26px;      font-weight: bold;    }  }  .comment-list {    margin: 10px;    .comment {      .comment-username {        color: #999;        cursor: pointer;      }    }  }}</style>

my-cycle-list组件:

<template>  <div class="my-cycle-list">    <div class="lists">      <!-- 回复 -->      <div v-if="self.replyId">        <span class="self-username"> {{ self.userName }} 回复 </span>        <span class="parent-username" @click="parentClick"          >{{ parent.userName }}:</span        >        {{ self.desc }}        <span class="time">{{ self.time }}</span>      </div>      <!-- 评论 -->      <div v-else>        <span class="self-username" @click="commentUserNameClick">          {{ self.userName }}:        </span>        {{ self.desc }}        <span class="time">{{ self.time }}</span>      </div>      <!-- 递归组件 -->      <div v-if="self.children.length < flagNum || showAll">        <my-cycle-list          v-for="(child, index) in self.children"          :self="child"          :parent="self"          :key="index"        ></my-cycle-list>      </div>      <!-- 查看全部 -->      <div        v-if="self.children.length >= flagNum"        class="view-all"        @click="viewAll"      >      {{ !showAll ? `查看全部 ${self.children.length} 条回复` : `收起 ${self.children.length} 条回复`}}               </div>    </div>  </div></template><script>import myCycleList from '@/components/my-cycle-list'export default {  props: ['self', 'parent'],  components: { myCycleList },  name: 'my-cycle-list',  data() {    return {      flagNum: 2, // 超过多少条折叠      showAll: false    }  },  created() {},  methods: {    // 点击被回复的昵称事件    parentClick() {      console.log(this.parent)    },    // 评论人点击事件    commentUserNameClick() {      console.log(this.self)    },    // 查看/收起回复    viewAll() {      this.showAll = !this.showAll    }  }}</script><style scoped lang="scss">.my-cycle-list {  .lists {    margin: 10px;    .self-username {      cursor: pointer;      color: #999;    }    .parent-username {      color: burlywood;      cursor: pointer;    }    .time {      margin: 0 10px;      color: #666;      font-size: 12px;    }    .view-all {      margin: 10px 0;      color: darkcyan;      cursor: pointer;    }  }}</style>

以上就是“vue怎么实现文章评论和回复列表”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: vue怎么实现文章评论和回复列表

本文链接: https://www.lsjlt.com/news/327162.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++中函数返回值的类型是由什么决定的
    在 c++ 中,函数返回值类型由其函数原型的类型决定,包括:函数原型指定返回值类型:在函数名称后跟冒号,再跟返回值类型。默认返回值类型为 int:如果不指定返回值类型,默认类型为 int...
    99+
    2024-05-14
    c++
  • 在c++中,什么叫函数的返回值
    在 c++ 中,函数只能返回一个值。解决方法:引用传递、结构体或类、out 参数。没有返回值的函数可以使用 void 类型,表示不返回任何值。 什么是 C++ 中函数的返回值? 在 C...
    99+
    2024-05-14
    c++
  • c++中static的作用和用法
    c++ 中的 static 关键字用于声明静态变量、函数或类成员,使其在程序生命周期内存在或与类的每个实例关联。具体用法如下:静态变量:在函数外声明,仅创建一份副本,在程序启动时初始化且...
    99+
    2024-05-14
    c++
  • static在c和c++中的区别
    static关键字在c和c++中用于控制变量的生命周期和作用域。在c中,它延长局部变量和限制全局变量的作用域。在c++中,它还用于定义类成员变量和函数、命名空间中的变量和函数,以及函数内...
    99+
    2024-05-14
    c语言 c++ 作用域
  • c++中a++与++a的区别
    c++ 中 a++ 和 ++a 区别:后缀递增 a++ 先返回原始值,再递增;前缀递增 ++a 先递增,再返回递增后的值。 C++ 中 a++ 与 ++a 的区别 在 C++ 中,a+...
    99+
    2024-05-14
    c++
  • if else在c++中的用法
    在 c++ 中,if else 语句根据条件执行不同代码块的语法为:if (condition) { } else { }。它可用于:检查数字是否为正数根据条件执行嵌套 if els...
    99+
    2024-05-14
    c++
  • struct在c和c++中的区别
    c和c++中struct的区别包括:c中成员默认公开访问,c++中默认私有访问。c++可以在struct定义中初始化成员,c中不允许。c++支持成员函数,c不支持。c++不支持匿名str...
    99+
    2024-05-14
    c++
  • c++中的所有函数都是传值调用吗
    函数调用类型可分为传值调用和引用调用,默认采用传值调用,传值调用中形参接收实参副本,引用调用中形参接收实参引用,对形参进行的修改也会影响实参。 C++中的函数调用类型 C++中,函数调...
    99+
    2024-05-14
    c++
  • c++中ifdef的用法
    c++ 中的 #ifdef 预处理器指令用于根据预定义宏是否存在来编译或不编译代码块。它的语法是 #ifdef ,其作用包括:检查宏是否存在,如果宏已定义,则编译其后的代码块;实现条件编...
    99+
    2024-05-14
    c++
  • c++中的函数调用有哪几种方式?它们有什么区别
    c++ 中的函数调用方式有 4 种:值传递(复制实参值,不影响实参)、引用传递(传递实参地址,修改形参值会修改实参)、指针传递(传递实参指向的内存地址,修改指向的值会影响实参)、rval...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作