当前位置:首页 > VUE

vue里实现增删改查

2026-03-27 05:14:25VUE

在Vue中实现增删改查(CRUD)

数据管理

使用dataref(Vue 3)定义响应式数据存储列表和表单数据:

// Vue 2
data() {
  return {
    items: [],
    form: { id: null, name: '', description: '' }
  }
}

// Vue 3
const items = ref([])
const form = reactive({ id: null, name: '', description: '' })

添加数据

通过表单提交将新数据加入列表:

function addItem() {
  if (!form.name) return
  items.value.push({ ...form, id: Date.now() })
  resetForm()
}
function resetForm() {
  form.id = null
  form.name = ''
  form.description = ''
}

删除数据

通过数组过滤或splice方法移除指定项:

vue里实现增删改查

function deleteItem(id) {
  items.value = items.value.filter(item => item.id !== id)
}

编辑数据

将选中数据加载到表单进行修改:

function editItem(item) {
  form.id = item.id
  form.name = item.name
  form.description = item.description
}
function updateItem() {
  const index = items.value.findIndex(item => item.id === form.id)
  if (index !== -1) {
    items.value.splice(index, 1, { ...form })
    resetForm()
  }
}

查询数据

实现本地搜索功能:

vue里实现增删改查

const searchQuery = ref('')
const filteredItems = computed(() => {
  return items.value.filter(item => 
    item.name.toLowerCase().includes(searchQuery.value.toLowerCase())
  )
})

组件示例

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">
    <table>
      <tr v-for="item in filteredItems" :key="item.id">
        <td>{{ item.name }}</td>
        <td>{{ item.description }}</td>
        <td>
          <button @click="editItem(item)">编辑</button>
          <button @click="deleteItem(item.id)">删除</button>
        </td>
      </tr>
    </table>

    <form @submit.prevent="form.id ? updateItem() : addItem()">
      <input v-model="form.name" required>
      <textarea v-model="form.description"></textarea>
      <button type="submit">{{ form.id ? '更新' : '添加' }}</button>
      <button v-if="form.id" @click="resetForm">取消</button>
    </form>
  </div>
</template>

后端集成

使用axios与API交互:

async function fetchItems() {
  const { data } = await axios.get('/api/items')
  items.value = data
}

async function saveItem() {
  const method = form.id ? 'put' : 'post'
  const url = form.id ? `/api/items/${form.id}` : '/api/items'
  await axios[method](url, form)
  await fetchItems()
  resetForm()
}

状态管理

对于复杂应用可引入Pinia/Vuex:

// Pinia示例
export const useItemStore = defineStore('items', {
  state: () => ({
    items: []
  }),
  actions: {
    async addItem(item) {
      await api.add(item)
      this.items.push(item)
    }
  }
})

表单验证

使用Vuelidate或原生验证:

import { required } from '@vuelidate/validators'
const rules = {
  form: {
    name: { required }
  }
}
const v$ = useVuelidate(rules, { form })

注意事项

  • 始终为列表项设置唯一key
  • 复杂表单考虑使用v-model修饰符(如.trim
  • 大规模数据考虑虚拟滚动优化性能
  • 敏感操作需添加确认对话框
  • API调用需添加错误处理

以上实现可根据项目需求组合使用,Vue 2与Vue 3的主要差异在于Composition API的使用方式。

标签: vue
分享给朋友:

相关文章

vue实现逻辑

vue实现逻辑

Vue 实现逻辑的核心概念 Vue.js 是一个渐进式 JavaScript 框架,其核心逻辑围绕数据驱动和组件化开发。通过响应式系统、虚拟 DOM 和组件生命周期等机制,Vue 实现了高效的前端开发…

vue 实现工具

vue 实现工具

Vue 实现工具的方法 使用 Vue 实现工具功能可以通过多种方式完成,具体取决于工具的类型和需求。以下是几种常见的方法: 组件化实现 创建一个独立的 Vue 组件来封装工具功能。例如,实现一个计…

vue 实现登录

vue 实现登录

Vue 实现登录功能 创建登录表单组件 在 Vue 项目中创建一个登录表单组件(如 Login.vue),包含用户名和密码输入框以及提交按钮。使用 v-model 实现双向数据绑定。 <tem…

vue实现京东

vue实现京东

Vue 实现京东电商网站的关键步骤 项目搭建与基础配置 使用 Vue CLI 或 Vite 初始化项目,安装 Vue Router 管理路由,Vuex/Pinia 管理状态。配置基础 UI 框架如 E…

vue实现tabbar

vue实现tabbar

Vue 实现 TabBar 的方法 使用 Vue Router 实现基础 TabBar 安装 Vue Router 依赖: npm install vue-router 创建路由配置文件(route…

vue实现keepalive

vue实现keepalive

Vue 中实现 keep-alive 在 Vue 中,keep-alive 是一个内置组件,用于缓存动态组件或组件的状态,避免重复渲染和销毁。以下是实现 keep-alive 的几种方法: 基本用法…