当前位置:首页 > 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.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Objec…

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue实现方法

vue实现方法

Vue 实现方法 Vue 是一种流行的前端框架,用于构建用户界面和单页应用。以下是几种常见的 Vue 实现方法: 创建 Vue 实例 通过 new Vue() 创建一个 Vue 实例,传入配置对象,…

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue实现剪辑

vue实现剪辑

Vue 实现视频剪辑功能 在Vue中实现视频剪辑功能通常需要结合HTML5的<video>元素和第三方库(如FFmpeg.js或Video.js)。以下是几种常见的实现方法: 使用FFm…