当前位置:首页 > VUE

vue实现curd

2026-02-10 10:08:51VUE

Vue 实现 CRUD 功能

安装 Vue 及相关依赖

确保已安装 Vue.js,推荐使用 Vue CLI 或 Vite 创建项目。对于数据请求,可安装 axios 或使用原生 fetch

npm install vue axios

创建数据模型

定义数据模型,通常是一个数组或对象,用于存储 CRUD 操作的数据。

data() {
  return {
    items: [],
    formData: {
      id: '',
      name: '',
      description: ''
    },
    editing: false
  };
}

实现 Create 功能

通过表单收集数据,发送 POST 请求到后端或直接添加到前端数据列表。

methods: {
  createItem() {
    if (this.editing) {
      // 更新逻辑
    } else {
      this.items.push({ ...this.formData, id: Date.now() });
      this.resetForm();
    }
  },
  resetForm() {
    this.formData = { id: '', name: '', description: '' };
    this.editing = false;
  }
}

实现 Read 功能

展示数据列表,通常通过 v-for 指令渲染。

<template>
  <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>
</template>

实现 Update 功能

编辑现有数据项,将表单数据填充为选中项的数据。

methods: {
  editItem(item) {
    this.formData = { ...item };
    this.editing = true;
  }
}

实现 Delete 功能

通过 ID 删除数据项。

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

表单绑定

使用 v-model 实现表单数据的双向绑定。

<template>
  <form @submit.prevent="createItem">
    <input v-model="formData.name" placeholder="Name" required>
    <input v-model="formData.description" placeholder="Description">
    <button type="submit">{{ editing ? 'Update' : 'Create' }}</button>
    <button type="button" @click="resetForm" v-if="editing">Cancel</button>
  </form>
</template>

与后端交互

使用 axios 发送 HTTP 请求,实现前后端数据同步。

methods: {
  async fetchItems() {
    const response = await axios.get('/api/items');
    this.items = response.data;
  },
  async createItem() {
    if (this.editing) {
      await axios.put(`/api/items/${this.formData.id}`, this.formData);
    } else {
      const response = await axios.post('/api/items', this.formData);
      this.items.push(response.data);
    }
    this.resetForm();
    this.fetchItems();
  },
  async deleteItem(id) {
    await axios.delete(`/api/items/${id}`);
    this.fetchItems();
  }
},
created() {
  this.fetchItems();
}

完整示例

以下是一个完整的 Vue CRUD 组件示例:

vue实现curd

<template>
  <div>
    <form @submit.prevent="handleSubmit">
      <input v-model="formData.name" placeholder="Name" required>
      <input v-model="formData.description" placeholder="Description">
      <button type="submit">{{ editing ? 'Update' : 'Create' }}</button>
      <button type="button" @click="resetForm" v-if="editing">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>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      items: [],
      formData: {
        id: '',
        name: '',
        description: ''
      },
      editing: false
    };
  },
  methods: {
    async fetchItems() {
      const response = await axios.get('/api/items');
      this.items = response.data;
    },
    async handleSubmit() {
      if (this.editing) {
        await axios.put(`/api/items/${this.formData.id}`, this.formData);
      } else {
        const response = await axios.post('/api/items', this.formData);
        this.items.push(response.data);
      }
      this.resetForm();
      this.fetchItems();
    },
    editItem(item) {
      this.formData = { ...item };
      this.editing = true;
    },
    async deleteItem(id) {
      await axios.delete(`/api/items/${id}`);
      this.fetchItems();
    },
    resetForm() {
      this.formData = { id: '', name: '', description: '' };
      this.editing = false;
    }
  },
  created() {
    this.fetchItems();
  }
};
</script>

注意事项

  • 表单验证:添加必要的验证逻辑,确保数据的完整性。
  • 错误处理:对 API 请求进行错误处理,显示友好的错误信息。
  • 状态管理:对于大型应用,考虑使用 Vuex 或 Pinia 管理状态。
  • 响应式更新:确保数据变化后视图及时更新。

标签: vuecurd
分享给朋友:

相关文章

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成当…

vue实现menu

vue实现menu

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

vue实现追加

vue实现追加

追加数据到数组或列表 在Vue中追加数据到数组或列表,可以通过push方法或concat方法实现。以下是几种常见的实现方式: 方法一:使用push方法 this.items.push(newIte…

vue 实现穿透

vue 实现穿透

Vue 样式穿透的实现方法 在 Vue 中,样式穿透通常指在带有 scoped 属性的样式块中,强制影响子组件的样式。以下是几种常见的实现方式: 使用 >>> 或 /deep/ 选…

vue实现dialog

vue实现dialog

Vue 实现 Dialog 的方法 使用 Vue 原生组件实现 Vue 可以通过组件化的方式实现 Dialog,以下是一个简单的实现示例: <template> <div>…

vue实现settimeout

vue实现settimeout

在 Vue 中实现 setTimeout Vue 中可以通过 JavaScript 原生的 setTimeout 方法实现延时操作,但需要注意结合 Vue 的响应式特性和生命周期管理。以下是几种常见实…