当前位置:首页 > VUE

vue里实现增删改查

2026-03-06 20:06:17VUE

Vue 中实现增删改查(CRUD)

基础数据结构准备

在 Vue 中实现增删改查通常需要先定义数据模型和操作逻辑。假设操作的对象为 items 列表,每个项包含 idname 属性:

data() {
  return {
    items: [
      { id: 1, name: 'Item 1' },
      { id: 2, name: 'Item 2' }
    ],
    newItem: { id: null, name: '' },
    editingItemId: null
  }
}

新增数据(Create)

通过表单绑定 newItem,提交时添加到列表:

methods: {
  addItem() {
    if (!this.newItem.name.trim()) return;
    this.newItem.id = Date.now(); // 生成唯一 ID
    this.items.push({ ...this.newItem });
    this.newItem.name = ''; // 清空输入
  }
}

模板部分:

<input v-model="newItem.name" placeholder="Enter item name">
<button @click="addItem">Add</button>

删除数据(Delete)

通过 id 过滤列表实现删除:

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

模板部分:

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

修改数据(Update)

进入编辑状态时保存当前编辑的 id 和临时数据:

methods: {
  startEdit(item) {
    this.editingItemId = item.id;
    this.newItem = { ...item };
  },
  saveEdit() {
    const index = this.items.findIndex(item => item.id === this.editingItemId);
    if (index !== -1) {
      this.items.splice(index, 1, { ...this.newItem });
      this.cancelEdit();
    }
  },
  cancelEdit() {
    this.editingItemId = null;
    this.newItem = { id: null, name: '' };
  }
}

模板部分:

<li v-for="item in items" :key="item.id">
  <template v-if="editingItemId === item.id">
    <input v-model="newItem.name">
    <button @click="saveEdit">Save</button>
    <button @click="cancelEdit">Cancel</button>
  </template>
  <template v-else>
    {{ item.name }}
    <button @click="startEdit(item)">Edit</button>
  </template>
</li>

查询数据(Read)

通过计算属性实现过滤查询:

computed: {
  filteredItems() {
    return this.items.filter(item => 
      item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
    );
  }
}

模板部分:

<input v-model="searchQuery" placeholder="Search...">
<ul>
  <li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li>
</ul>

与后端 API 交互

实际项目中通常会结合 axios 调用后端接口:

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.newItem);
    this.items.push(response.data);
  }
}

使用 Vuex 管理状态(可选)

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

vue里实现增删改查

// store.js
export default new Vuex.Store({
  state: {
    items: []
  },
  mutations: {
    ADD_ITEM(state, item) {
      state.items.push(item);
    }
  },
  actions: {
    addItem({ commit }, item) {
      commit('ADD_ITEM', item);
    }
  }
});

关键注意事项

  • 唯一标识:确保每个数据项有唯一 id(如 Date.now() 或后端生成的 ID)。
  • 响应式更新:直接修改数组元素不会触发视图更新,需使用 Vue.set 或替换整个数组。
  • 表单验证:新增/编辑时应验证输入数据的有效性。
  • 异步处理:实际项目中需处理 API 请求的加载状态和错误。

标签: vue
分享给朋友:

相关文章

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽 子…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HTM…

vue实现签章

vue实现签章

Vue 实现签章功能 签章功能通常包括手写签名、电子印章等。以下是基于 Vue 的实现方法: 使用 canvas 实现手写签名 安装依赖(如需要): npm install signatu…

vue实现分发

vue实现分发

Vue 实现分发的方法 在 Vue 中,分发(Distribution)通常指的是将内容从父组件传递到子组件,或者通过插槽(Slots)机制让父组件控制子组件的部分渲染内容。以下是几种常见的实现分发的…

vue实现横滚

vue实现横滚

Vue 实现横滚效果 横滚效果通常指水平滚动内容,常见于轮播图、横向导航栏等场景。以下是几种实现方式: 使用 CSS 和 Vue 结合 通过 CSS 的 overflow-x 和 white-spa…

vue实现抽奖轮盘

vue实现抽奖轮盘

实现抽奖轮盘的基本思路 使用Vue实现抽奖轮盘的核心在于动态旋转动画和结果判定。通常需要结合CSS动画或JavaScript动画库(如GSAP)控制轮盘的旋转角度,并通过随机数或后端接口确定最终奖项。…