当前位置:首页 > 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 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { --…

vue实现点击

vue实现点击

实现点击事件的基本方法 在Vue中实现点击事件可以通过v-on指令或@简写方式绑定。以下是常见的点击事件绑定方法: <template> <button v-on:click=…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project c…

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind:…

vue原理实现

vue原理实现

Vue 原理实现的核心机制 Vue.js 的核心原理基于响应式系统、虚拟 DOM 和模板编译。以下是其核心实现机制的分解: 响应式系统 Vue 使用 Object.defineProperty(Vu…