当前位置:首页 > VUE

vue 实现删除传值

2026-01-20 09:19:13VUE

Vue 实现删除传值的方法

在 Vue 中实现删除并传值通常涉及父子组件通信或事件触发。以下是几种常见实现方式:

通过 props 和 $emit 实现父子组件传值

父组件传递数据和方法给子组件,子组件触发删除操作后回传数据:

vue 实现删除传值

<!-- 父组件 -->
<template>
  <child-component :items="items" @delete-item="handleDelete" />
</template>

<script>
export default {
  data() {
    return {
      items: [{ id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }]
    }
  },
  methods: {
    handleDelete(itemId) {
      this.items = this.items.filter(item => item.id !== itemId)
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div v-for="item in items" :key="item.id">
    {{ item.name }}
    <button @click="$emit('delete-item', item.id)">Delete</button>
  </div>
</template>

<script>
export default {
  props: ['items']
}
</script>

使用 v-model 实现双向绑定

通过 v-model 实现更简洁的双向数据绑定:

vue 实现删除传值

<!-- 父组件 -->
<template>
  <child-component v-model="items" />
</template>

<script>
export default {
  data() {
    return {
      items: [{ id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }]
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div v-for="(item, index) in value" :key="item.id">
    {{ item.name }}
    <button @click="removeItem(index)">Delete</button>
  </div>
</template>

<script>
export default {
  props: ['value'],
  methods: {
    removeItem(index) {
      this.$emit('input', [
        ...this.value.slice(0, index),
        ...this.value.slice(index + 1)
      ])
    }
  }
}
</script>

使用 Vuex 状态管理

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

// store.js
export default new Vuex.Store({
  state: {
    items: [{ id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }]
  },
  mutations: {
    DELETE_ITEM(state, itemId) {
      state.items = state.items.filter(item => item.id !== itemId)
    }
  },
  actions: {
    deleteItem({ commit }, itemId) {
      commit('DELETE_ITEM', itemId)
    }
  }
})
<!-- 组件中使用 -->
<template>
  <div v-for="item in $store.state.items" :key="item.id">
    {{ item.name }}
    <button @click="deleteItem(item.id)">Delete</button>
  </div>
</template>

<script>
export default {
  methods: {
    deleteItem(itemId) {
      this.$store.dispatch('deleteItem', itemId)
    }
  }
}
</script>

使用事件总线实现跨组件通信

对于非父子关系的组件通信,可以使用事件总线:

// eventBus.js
import Vue from 'vue'
export const EventBus = new Vue()
<!-- 发送事件的组件 -->
<template>
  <button @click="deleteItem(item.id)">Delete</button>
</template>

<script>
import { EventBus } from './eventBus'
export default {
  methods: {
    deleteItem(itemId) {
      EventBus.$emit('item-deleted', itemId)
    }
  }
}
</script>

<!-- 接收事件的组件 -->
<script>
import { EventBus } from './eventBus'
export default {
  created() {
    EventBus.$on('item-deleted', itemId => {
      // 处理删除逻辑
    })
  }
}
</script>

注意事项

  • 对于列表渲染,始终使用唯一的 key 属性
  • 考虑使用深层对象时可能需要 Vue.set 或展开运算符确保响应式更新
  • 大型应用推荐使用 Vuex 管理状态,小型项目可使用 props/emit
  • 事件总线适合简单场景,复杂场景可能产生维护问题

以上方法可根据具体项目需求选择使用,组合式 API 的写法也类似,只是语法稍有不同。

标签: vue
分享给朋友:

相关文章

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr.…

jquery实现vue

jquery实现vue

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

vue 实现排序

vue 实现排序

Vue 实现排序的方法 使用计算属性实现排序 通过计算属性对数组进行排序,可以保持原始数据不变。示例代码展示了如何对列表按名称升序排序: <template> <div>…

vue实现treeselect

vue实现treeselect

Vue TreeSelect 实现方法 使用 Vue 实现 TreeSelect 组件可以通过以下几种方式完成,包括使用现成的第三方库或自行封装组件。 使用第三方库 推荐使用成熟的第三方 TreeS…

vue递归实现

vue递归实现

vue递归实现方法 在Vue中实现递归组件通常用于树形结构、嵌套菜单等场景。以下是具体实现方式: 使用组件name属性递归 定义一个组件时,通过name属性让组件可以在自身模板中调用自己:…

vue实现treetable

vue实现treetable

Vue实现TreeTable的方法 使用第三方组件库(如Element UI) Element UI的el-table组件支持树形表格展示,通过设置row-key和tree-props属性即可实现。…