当前位置:首页 > VUE

vue实现评论点赞

2026-02-23 01:55:43VUE

Vue 实现评论点赞功能

数据绑定与事件处理

在 Vue 中,可以通过 v-model 绑定点赞状态,使用 v-on@ 监听点击事件。假设每条评论数据包含 idcontentliked 字段:

<template>
  <div class="comment" v-for="comment in comments" :key="comment.id">
    <p>{{ comment.content }}</p>
    <button @click="toggleLike(comment)">
      {{ comment.liked ? '取消点赞' : '点赞' }}
    </button>
    <span>点赞数: {{ comment.likes }}</span>
  </div>
</template>

状态更新逻辑

在 Vue 实例的 methods 中定义 toggleLike 方法,更新点赞状态和计数:

vue实现评论点赞

<script>
export default {
  data() {
    return {
      comments: [
        { id: 1, content: '评论1', liked: false, likes: 0 },
        { id: 2, content: '评论2', liked: true, likes: 5 }
      ]
    }
  },
  methods: {
    toggleLike(comment) {
      comment.liked = !comment.liked;
      comment.likes += comment.liked ? 1 : -1;
    }
  }
}
</script>

后端交互(可选)

如果需要持久化点赞数据,可以通过 axios 发送请求到后端 API:

vue实现评论点赞

methods: {
  async toggleLike(comment) {
    try {
      const response = await axios.post('/api/like', {
        commentId: comment.id,
        action: comment.liked ? 'unlike' : 'like'
      });
      comment.likes = response.data.likes;
      comment.liked = response.data.liked;
    } catch (error) {
      console.error('点赞失败:', error);
    }
  }
}

样式优化

为点赞按钮添加动态样式,反映当前状态:

<style>
button {
  background: #fff;
  border: 1px solid #ccc;
  padding: 5px 10px;
  cursor: pointer;
}
button:hover {
  background: #f0f0f0;
}
button.liked {
  background: #1890ff;
  color: white;
  border-color: #1890ff;
}
</style>

完整组件示例

整合以上代码的完整单文件组件:

<template>
  <div class="comment" v-for="comment in comments" :key="comment.id">
    <p>{{ comment.content }}</p>
    <button 
      @click="toggleLike(comment)"
      :class="{ liked: comment.liked }"
    >
      {{ comment.liked ? '取消点赞' : '点赞' }}
    </button>
    <span>点赞数: {{ comment.likes }}</span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      comments: [
        { id: 1, content: '评论1', liked: false, likes: 0 },
        { id: 2, content: '评论2', liked: true, likes: 5 }
      ]
    }
  },
  methods: {
    toggleLike(comment) {
      comment.liked = !comment.liked;
      comment.likes += comment.liked ? 1 : -1;
    }
  }
}
</script>

<style>
.comment {
  margin-bottom: 20px;
  padding: 10px;
  border: 1px solid #eee;
}
button {
  background: #fff;
  border: 1px solid #ccc;
  padding: 5px 10px;
  cursor: pointer;
}
button:hover {
  background: #f0f0f0;
}
button.liked {
  background: #1890ff;
  color: white;
  border-color: #1890ff;
}
</style>

标签: vue
分享给朋友:

相关文章

vue卖座网实现

vue卖座网实现

Vue 卖座网实现 项目结构搭建 使用 Vue CLI 快速初始化项目,安装必要依赖如 Vue Router、Vuex、Axios。 创建核心目录结构:components(通用组件)、views(页…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Toke…

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓…

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout()…

vue实现公告

vue实现公告

Vue 实现公告功能的方法 公告功能通常需要实现滚动展示、自动切换或固定显示的效果。以下是几种常见的实现方式: 使用 marquee 标签实现滚动公告 <template> <…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景…