当前位置:首页 > VUE

vue实现列表点赞

2026-02-20 16:55:25VUE

实现思路

在Vue中实现列表点赞功能,主要涉及数据绑定、事件处理和状态更新。通常需要为列表中的每一项维护一个点赞状态,并通过点击事件触发状态变更。

基础实现

准备一个包含点赞状态的列表数据,使用v-for渲染列表,并为每个项绑定点击事件。

vue实现列表点赞

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item.content }}
        <button @click="toggleLike(index)">
          {{ item.liked ? '取消点赞' : '点赞' }} ({{ item.likes }})
        </button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { content: '内容1', likes: 10, liked: false },
        { content: '内容2', likes: 5, liked: true },
        { content: '内容3', likes: 8, liked: false }
      ]
    }
  },
  methods: {
    toggleLike(index) {
      const item = this.items[index]
      item.liked = !item.liked
      item.likes += item.liked ? 1 : -1
    }
  }
}
</script>

优化实现

添加动画效果提升用户体验,使用Vue的过渡组件实现点赞动画。

vue实现列表点赞

<template>
  <div>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item.content }}
        <button @click="toggleLike(index)">
          <transition name="fade" mode="out-in">
            <span :key="item.liked">
              {{ item.liked ? '取消点赞' : '点赞' }}
            </span>
          </transition>
          ({{ item.likes }})
        </button>
      </li>
    </ul>
  </div>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.3s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

服务端交互

实际项目中通常需要与后端API交互,保存点赞状态到数据库。

methods: {
  async toggleLike(index) {
    const item = this.items[index]
    const newLikedState = !item.liked

    try {
      const response = await axios.post('/api/like', {
        itemId: item.id,
        liked: newLikedState
      })

      item.liked = newLikedState
      item.likes = response.data.likes
    } catch (error) {
      console.error('点赞操作失败', error)
    }
  }
}

防抖处理

为防止用户快速多次点击,可以添加防抖功能。

import { debounce } from 'lodash'

methods: {
  toggleLike: debounce(function(index) {
    const item = this.items[index]
    item.liked = !item.liked
    item.likes += item.liked ? 1 : -1
  }, 300)
}

标签: 列表vue
分享给朋友:

相关文章

vue实现多用户登录

vue实现多用户登录

实现多用户登录的基本思路 在Vue中实现多用户登录通常需要结合后端API完成身份验证,并通过前端路由、状态管理(如Vuex或Pinia)和本地存储(如localStorage)来管理用户会话。以下是关…

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…

vue 实现菜单

vue 实现菜单

Vue 实现菜单的方法 使用 Vue 实现菜单可以通过多种方式,以下是几种常见的方法: 使用 Vue Router 实现动态路由菜单 通过 Vue Router 可以动态生成菜单,根据路由配置自动渲…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

vue实现公告

vue实现公告

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

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…