当前位置:首页 > 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方法移除指定项:

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()
  }
}

查询数据

实现本地搜索功能:

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或原生验证:

vue里实现增删改查

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实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

vue菜单实现

vue菜单实现

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

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现计算

vue实现计算

Vue 实现计算的方法 在 Vue 中实现计算功能可以通过多种方式完成,主要包括计算属性(computed)、方法(methods)和侦听器(watch)。以下是具体的实现方法: 计算属性(Comp…

vue轮播实现

vue轮播实现

Vue 轮播实现方法 使用第三方库(推荐) 安装 swiper 或 vue-awesome-swiper 库,快速实现功能丰富的轮播效果。 以 vue-awesome-swiper 为例: npm…

vue 实现登录验证

vue 实现登录验证

Vue 实现登录验证的方法 使用 Vue Router 进行路由守卫 在 Vue 项目中,可以通过 Vue Router 的路由守卫(Navigation Guards)实现登录验证。路由守卫可以在路…