当前位置:首页 > VUE

vue实现增删改

2026-01-11 21:07:26VUE

Vue 实现增删改查功能

在 Vue 中实现增删改查功能通常涉及数据绑定、事件处理和组件通信。以下是实现这些功能的具体方法。

数据初始化

在 Vue 的 data 中初始化一个数组来存储数据,例如一个简单的任务列表:

data() {
  return {
    tasks: [
      { id: 1, name: 'Task 1', completed: false },
      { id: 2, name: 'Task 2', completed: true }
    ],
    newTask: '',
    editingTask: null
  }
}

新增功能

通过输入框绑定 v-model 来捕获用户输入,点击按钮触发新增方法:

<input v-model="newTask" placeholder="Add a new task">
<button @click="addTask">Add Task</button>

在方法中实现新增逻辑:

methods: {
  addTask() {
    if (this.newTask.trim() === '') return;
    this.tasks.push({
      id: Date.now(),
      name: this.newTask,
      completed: false
    });
    this.newTask = '';
  }
}

删除功能

为每个列表项添加删除按钮,通过传递索引或 ID 来删除对应项:

vue实现增删改

<ul>
  <li v-for="(task, index) in tasks" :key="task.id">
    {{ task.name }}
    <button @click="deleteTask(index)">Delete</button>
  </li>
</ul>

删除方法实现:

deleteTask(index) {
  this.tasks.splice(index, 1);
}

修改功能

进入编辑模式时保存当前编辑的任务,绑定输入框到临时变量:

<li v-for="(task, index) in tasks" :key="task.id">
  <span v-if="editingTask !== task">
    {{ task.name }}
    <button @click="startEditing(task)">Edit</button>
  </span>
  <input v-else v-model="task.name" @blur="finishEditing">
</li>

编辑方法实现:

vue实现增删改

startEditing(task) {
  this.editingTask = task;
},
finishEditing() {
  this.editingTask = null;
}

查询功能

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

computed: {
  filteredTasks() {
    return this.tasks.filter(task => task.name.includes(this.searchQuery));
  }
}

在模板中使用:

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

完整组件示例

<template>
  <div>
    <input v-model="newTask" placeholder="Add a new task">
    <button @click="addTask">Add Task</button>

    <input v-model="searchQuery" placeholder="Search tasks">

    <ul>
      <li v-for="(task, index) in filteredTasks" :key="task.id">
        <span v-if="editingTask !== task">
          {{ task.name }}
          <button @click="startEditing(task)">Edit</button>
          <button @click="deleteTask(index)">Delete</button>
        </span>
        <input v-else v-model="task.name" @blur="finishEditing">
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tasks: [
        { id: 1, name: 'Task 1', completed: false },
        { id: 2, name: 'Task 2', completed: true }
      ],
      newTask: '',
      editingTask: null,
      searchQuery: ''
    }
  },
  computed: {
    filteredTasks() {
      return this.tasks.filter(task => 
        task.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      );
    }
  },
  methods: {
    addTask() {
      if (this.newTask.trim() === '') return;
      this.tasks.push({
        id: Date.now(),
        name: this.newTask,
        completed: false
      });
      this.newTask = '';
    },
    deleteTask(index) {
      this.tasks.splice(index, 1);
    },
    startEditing(task) {
      this.editingTask = task;
    },
    finishEditing() {
      this.editingTask = null;
    }
  }
}
</script>

使用 Vuex 管理状态

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

// store.js
export default new Vuex.Store({
  state: {
    tasks: []
  },
  mutations: {
    ADD_TASK(state, task) {
      state.tasks.push(task);
    },
    DELETE_TASK(state, index) {
      state.tasks.splice(index, 1);
    },
    UPDATE_TASK(state, { index, task }) {
      state.tasks[index] = task;
    }
  },
  actions: {
    addTask({ commit }, task) {
      commit('ADD_TASK', task);
    },
    deleteTask({ commit }, index) {
      commit('DELETE_TASK', index);
    },
    updateTask({ commit }, payload) {
      commit('UPDATE_TASK', payload);
    }
  }
});

在组件中通过 mapActions 使用:

import { mapActions } from 'vuex';

methods: {
  ...mapActions(['addTask', 'deleteTask', 'updateTask']),
  // 其他组件方法
}

注意事项

  • 为列表项设置唯一的 key 属性提高渲染性能
  • 对于复杂表单验证,可以使用 Vuelidate 等验证库
  • 考虑添加防抖处理搜索输入
  • 对于大量数据,实现分页功能

以上方法提供了在 Vue 中实现基本增删改查功能的核心实现,可以根据实际需求进行扩展和优化。

标签: vue
分享给朋友:

相关文章

vue 实现多选

vue 实现多选

Vue 实现多选的方法 在 Vue 中实现多选功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 v-model 绑定数组 Vue 的 v-model 指令可以与复选框结合使用,绑定到一个…

vue实现聊天

vue实现聊天

Vue实现聊天功能 基础项目结构搭建 使用Vue CLI或Vite创建项目,安装必要依赖如socket.io-client或axios(根据通信方式选择)。核心组件通常包括: ChatWindow.…

vue实现sql操作

vue实现sql操作

在Vue中实现SQL操作通常需要结合后端服务或本地数据库技术,因为前端JavaScript无法直接连接SQL数据库。以下是几种常见的实现方式: 通过API与后端交互 Vue前端通过HTTP请求(如…

vue实现添加用户

vue实现添加用户

Vue 实现添加用户功能 数据绑定与表单设计 在 Vue 中实现添加用户功能,首先需要设计一个表单,用于收集用户输入的数据。通过 v-model 实现双向数据绑定,确保表单数据与 Vue 实例中的数据…

vue实现好评弹框

vue实现好评弹框

Vue 实现好评弹框的方法 使用 Vue 实现好评弹框可以通过组件化方式完成,结合动态数据绑定和事件处理。以下是具体实现步骤: 1. 创建弹框组件 新建一个 RatingDialog.vue 组件…

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &l…