当前位置:首页 > VUE

vue里实现增删改查

2026-01-07 05:55:11VUE

在Vue中实现增删改查

数据初始化

在Vue组件的data中定义初始数据和表单绑定的变量:

data() {
  return {
    items: [
      { id: 1, name: 'Item 1', description: 'Description 1' },
      { id: 2, name: 'Item 2', description: 'Description 2' }
    ],
    form: {
      id: null,
      name: '',
      description: ''
    },
    isEditing: false
  }
}

添加功能实现

创建方法处理表单提交,将新项添加到数组中:

methods: {
  addItem() {
    if (!this.form.name || !this.form.description) return

    const newItem = {
      id: Date.now(),
      name: this.form.name,
      description: this.form.description
    }
    this.items.push(newItem)
    this.resetForm()
  }
}

删除功能实现

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

vue里实现增删改查

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

编辑功能实现

设置编辑状态并填充表单数据:

editItem(item) {
  this.isEditing = true
  this.form = { ...item }
}

更新功能实现

修改现有项并重置表单状态:

vue里实现增删改查

updateItem() {
  const index = this.items.findIndex(item => item.id === this.form.id)
  if (index !== -1) {
    this.items.splice(index, 1, { ...this.form })
    this.resetForm()
    this.isEditing = false
  }
}

表单重置

清空表单数据的方法:

resetForm() {
  this.form = {
    id: null,
    name: '',
    description: ''
  }
}

模板示例

<template>
  <div>
    <form @submit.prevent="isEditing ? updateItem() : addItem()">
      <input v-model="form.name" placeholder="Name">
      <input v-model="form.description" placeholder="Description">
      <button type="submit">{{ isEditing ? 'Update' : 'Add' }}</button>
      <button v-if="isEditing" @click="resetForm">Cancel</button>
    </form>

    <ul>
      <li v-for="item in items" :key="item.id">
        {{ item.name }} - {{ item.description }}
        <button @click="editItem(item)">Edit</button>
        <button @click="deleteItem(item.id)">Delete</button>
      </li>
    </ul>
  </div>
</template>

使用Vuex管理状态

对于大型应用,建议使用Vuex集中管理状态:

// store.js
export default new Vuex.Store({
  state: {
    items: []
  },
  mutations: {
    ADD_ITEM(state, item) {
      state.items.push(item)
    },
    DELETE_ITEM(state, id) {
      state.items = state.items.filter(item => item.id !== id)
    },
    UPDATE_ITEM(state, updatedItem) {
      const index = state.items.findIndex(item => item.id === updatedItem.id)
      if (index !== -1) {
        state.items.splice(index, 1, updatedItem)
      }
    }
  },
  actions: {
    addItem({ commit }, item) {
      commit('ADD_ITEM', item)
    },
    deleteItem({ commit }, id) {
      commit('DELETE_ITEM', id)
    },
    updateItem({ commit }, item) {
      commit('UPDATE_ITEM', item)
    }
  }
})

使用axios进行API调用

结合后端API实现完整CRUD:

import axios from 'axios'

methods: {
  async fetchItems() {
    const response = await axios.get('/api/items')
    this.items = response.data
  },
  async addItem() {
    const response = await axios.post('/api/items', this.form)
    this.items.push(response.data)
    this.resetForm()
  },
  async deleteItem(id) {
    await axios.delete(`/api/items/${id}`)
    this.items = this.items.filter(item => item.id !== id)
  },
  async updateItem() {
    const response = await axios.put(`/api/items/${this.form.id}`, this.form)
    const index = this.items.findIndex(item => item.id === this.form.id)
    this.items.splice(index, 1, response.data)
    this.resetForm()
    this.isEditing = false
  }
}

标签: vue
分享给朋友:

相关文章

vue实现atm

vue实现atm

Vue实现ATM机模拟功能 使用Vue.js实现ATM机模拟功能需要结合组件化开发、状态管理以及用户交互逻辑。以下是关键实现步骤: 核心组件结构 创建以下Vue组件构建ATM界面: Card…

vue实现选择分类

vue实现选择分类

Vue 实现选择分类的方法 使用 v-model 绑定选择值 在 Vue 中可以通过 v-model 指令实现双向数据绑定,适用于下拉选择框(<select>)。以下是一个基本示例:…

vue前端实现注册

vue前端实现注册

使用 Vue 实现用户注册功能 环境准备 确保已安装 Vue CLI 或通过 CDN 引入 Vue。若使用 Vue CLI,需安装 axios 或其他 HTTP 库用于后端通信。 注册表单组件 创建…

vue实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示…

vue前端实现登录

vue前端实现登录

实现登录功能的基本流程 使用Vue实现登录功能需要结合前端框架和后端API交互。以下是一个典型的实现方案: 安装必要依赖 确保项目已安装axios用于HTTP请求: npm install axi…

vue点击实现排序

vue点击实现排序

实现点击排序的方法 在Vue中实现点击排序功能,可以通过以下几种方式完成: 使用计算属性结合排序方法 定义一个响应式数据存储排序状态,通过计算属性动态返回排序后的数组。点击事件切换排序状态。…