当前位置:首页 > 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 方法,更新点赞状态和计数:

<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:

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>

完整组件示例

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

vue实现评论点赞

<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 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

vue菜单实现

vue菜单实现

Vue 菜单实现方法 使用 Element UI 的菜单组件 Element UI 提供了现成的菜单组件,适合快速实现导航菜单。安装 Element UI 后,可以直接使用 el-menu 相关组件。…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue实现输入地址

vue实现输入地址

Vue 实现输入地址功能 在 Vue 中实现输入地址功能,可以通过结合表单输入、地图 API(如高德、百度或 Google Maps)以及地址自动补全等方式完成。以下是几种常见方法: 使用高德地图…

vue怎么实现日历

vue怎么实现日历

实现日历组件的基本方法 使用Vue实现日历组件可以通过以下步骤完成。这里提供一个基础的实现思路,结合Vue 3的Composition API和模板语法。 安装依赖(如需要) npm instal…

vue实现理财超市

vue实现理财超市

Vue实现理财超市功能 理财超市通常包含产品展示、筛选、排序、详情页等功能,以下是基于Vue的实现方案: 技术栈建议 Vue 2/3 + Vue Router UI库:Element UI/Ant…