当前位置:首页 > VUE

vue实现CRUD

2026-01-08 00:44:12VUE

Vue 实现 CRUD 操作

Vue 提供了响应式数据绑定和组件化开发能力,结合后端 API 可以轻松实现 CRUD(增删改查)功能。以下是基于 Vue 3 和 Axios 的完整实现方案。

安装依赖

确保项目中已安装 axios 用于 HTTP 请求:

vue实现CRUD

npm install axios

基础组件结构

创建一个 UserList.vue 组件作为示例:

<template>
  <div>
    <button @click="showAddModal">添加用户</button>
    <table>
      <tr v-for="user in users" :key="user.id">
        <td>{{ user.name }}</td>
        <td>
          <button @click="editUser(user)">编辑</button>
          <button @click="deleteUser(user.id)">删除</button>
        </td>
      </tr>
    </table>

    <!-- 添加/编辑模态框 -->
    <dialog v-if="showModal">
      <input v-model="currentUser.name" placeholder="姓名">
      <button @click="saveUser">保存</button>
      <button @click="closeModal">取消</button>
    </dialog>
  </div>
</template>

数据与状态管理

<script>
import { ref, onMounted } from 'vue'
import axios from 'axios'

export default {
  setup() {
    const users = ref([])
    const showModal = ref(false)
    const currentUser = ref({ id: null, name: '' })
    const isEditMode = ref(false)

    const fetchUsers = async () => {
      const response = await axios.get('/api/users')
      users.value = response.data
    }

    onMounted(fetchUsers)

    return {
      users,
      showModal,
      currentUser,
      isEditMode,
      fetchUsers
    }
  }
}
</script>

CRUD 方法实现

methods: {
  showAddModal() {
    this.currentUser = { id: null, name: '' }
    this.isEditMode = false
    this.showModal = true
  },

  editUser(user) {
    this.currentUser = { ...user }
    this.isEditMode = true
    this.showModal = true
  },

  async saveUser() {
    if (this.isEditMode) {
      await axios.put(`/api/users/${this.currentUser.id}`, this.currentUser)
    } else {
      await axios.post('/api/users', this.currentUser)
    }
    this.fetchUsers()
    this.closeModal()
  },

  async deleteUser(id) {
    if (confirm('确定删除吗?')) {
      await axios.delete(`/api/users/${id}`)
      this.fetchUsers()
    }
  },

  closeModal() {
    this.showModal = false
  }
}

样式优化

<style scoped>
table {
  width: 100%;
  border-collapse: collapse;
}
tr:nth-child(even) {
  background-color: #f2f2f2;
}
dialog {
  padding: 20px;
  border-radius: 5px;
}
</style>

进阶优化方案

使用 Pinia 进行状态管理

创建 usersStore.js

vue实现CRUD

import { defineStore } from 'pinia'

export const useUsersStore = defineStore('users', {
  state: () => ({
    users: [],
    currentUser: null
  }),
  actions: {
    async fetchUsers() {
      const res = await axios.get('/api/users')
      this.users = res.data
    },
    async saveUser(user) {
      if (user.id) {
        await axios.put(`/api/users/${user.id}`, user)
      } else {
        await axios.post('/api/users', user)
      }
      this.fetchUsers()
    }
  }
})

表单验证

添加 Vuelidate 进行验证:

import { useVuelidate } from '@vuelidate/core'
import { required } from '@vuelidate/validators'

export default {
  setup() {
    const rules = {
      name: { required }
    }
    const v$ = useVuelidate(rules, currentUser)
    return { v$ }
  }
}

API 服务封装

创建 apiService.js

const API_URL = '/api/users'

export default {
  getAll() {
    return axios.get(API_URL)
  },
  create(user) {
    return axios.post(API_URL, user)
  },
  update(id, user) {
    return axios.put(`${API_URL}/${id}`, user)
  },
  delete(id) {
    return axios.delete(`${API_URL}/${id}`)
  }
}

注意事项

  1. 后端 API 需要实现对应的 RESTful 接口
  2. 处理网络请求错误时应该添加 catch 块
  3. 对于大型项目建议使用 Vuex/Pinia 集中管理状态
  4. 表单提交建议添加防抖或禁用按钮防止重复提交
  5. 列表数据量大时应考虑分页加载

以上方案可根据实际项目需求进行调整,核心逻辑是通过 Vue 的响应式特性同步前端状态与后端数据。

标签: vueCRUD
分享给朋友:

相关文章

vue中登陆实现逻辑

vue中登陆实现逻辑

Vue 中登录实现逻辑 前端实现逻辑 表单验证 使用 Vue 的表单验证库(如 VeeValidate)或自定义验证规则,确保用户输入的账号和密码符合要求。例如,检查邮箱格式、密码长度等。 发送登录…

vue实现博客

vue实现博客

Vue 实现博客的基本步骤 使用 Vue.js 实现一个博客系统可以分为前端和后端两部分。以下是基于 Vue 的前端实现方案,后端可以选择 Node.js、Django 或其他框架。 项目初始化 使…

vue实现ide

vue实现ide

Vue 实现 IDE 的基本思路 使用 Vue 构建一个简易的集成开发环境(IDE)需要整合代码编辑器、文件管理、终端模拟等功能。以下是关键实现步骤和推荐工具。 核心功能模块 代码编辑器 使用…

proxy实现vue

proxy实现vue

使用 Proxy 实现 Vue 响应式系统 Vue 3 的响应式系统基于 JavaScript 的 Proxy API,通过代理对象实现对属性的拦截和依赖追踪。以下是实现的核心逻辑: 创建响应式对象…

vue实现门户

vue实现门户

Vue 实现门户网站的关键步骤 搭建基础框架 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理多页面路由。门户通常需要响应式布局,可引入 UI 库如 Element P…

vue ui实现创建vue项目

vue ui实现创建vue项目

使用 Vue UI 创建 Vue 项目 Vue UI 是 Vue CLI 提供的图形化界面工具,可以通过可视化操作创建和管理 Vue 项目。 安装 Vue CLI 确保已安装 Node.js(建议版…