当前位置:首页 > VUE

vue实现动态添加删除

2026-02-24 02:15:54VUE

Vue 动态添加和删除的实现方法

使用 v-for 和数组方法

在 Vue 中可以通过 v-for 指令结合数组方法来动态渲染列表,并通过数组的 push 和 splice 方法实现添加和删除功能。

<template>
  <div>
    <button @click="addItem">添加项目</button>
    <ul>
      <li v-for="(item, index) in items" :key="index">
        {{ item }}
        <button @click="removeItem(index)">删除</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['项目1', '项目2', '项目3']
    }
  },
  methods: {
    addItem() {
      this.items.push(`项目${this.items.length + 1}`)
    },
    removeItem(index) {
      this.items.splice(index, 1)
    }
  }
}
</script>

使用计算属性

对于更复杂的动态内容,可以使用计算属性来管理数据,并通过方法来修改数据源。

vue实现动态添加删除

<template>
  <div>
    <input v-model="newItem" placeholder="输入新项目">
    <button @click="addItem">添加</button>
    <ul>
      <li v-for="(item, index) in filteredItems" :key="index">
        {{ item }}
        <button @click="removeItem(index)">删除</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [],
      newItem: ''
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => item.length > 0)
    }
  },
  methods: {
    addItem() {
      if (this.newItem.trim()) {
        this.items.push(this.newItem)
        this.newItem = ''
      }
    },
    removeItem(index) {
      this.items.splice(index, 1)
    }
  }
}
</script>

动态组件

对于需要动态添加和删除组件的情况,可以使用动态组件配合 is 属性。

vue实现动态添加删除

<template>
  <div>
    <button @click="addComponent">添加组件</button>
    <div v-for="(comp, index) in components" :key="index">
      <component :is="comp.type" @remove="removeComponent(index)"></component>
    </div>
  </div>
</template>

<script>
import ComponentA from './ComponentA.vue'
import ComponentB from './ComponentB.vue'

export default {
  components: { ComponentA, ComponentB },
  data() {
    return {
      components: [],
      nextComponent: 0
    }
  },
  methods: {
    addComponent() {
      this.components.push({
        type: this.nextComponent % 2 === 0 ? 'ComponentA' : 'ComponentB'
      })
      this.nextComponent++
    },
    removeComponent(index) {
      this.components.splice(index, 1)
    }
  }
}
</script>

注意事项

为每个动态生成的元素添加唯一的 key 属性,帮助 Vue 高效地更新 DOM。

避免直接操作 DOM,始终通过修改数据来驱动视图变化。

对于大型列表,考虑使用虚拟滚动技术优化性能。

标签: 动态vue
分享给朋友:

相关文章

vue能实现

vue能实现

Vue.js 是一个流行的前端框架,能够实现多种功能。以下是 Vue 能够实现的主要功能和特性: 响应式数据绑定 Vue 的核心特性之一是响应式数据绑定。通过数据驱动视图,当数据发生变化时,视图会自…

vue实现海报

vue实现海报

Vue 实现海报生成方案 使用 html2canvas 库 html2canvas 是一个将 HTML 元素转换为 Canvas 的库,适合将 Vue 组件渲染为海报图片 安装依赖: npm in…

vue底层实现

vue底层实现

Vue.js 的底层实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现细节: 响应式系统 Vue 2…

vue实现发帖

vue实现发帖

使用 Vue 实现发帖功能 前端实现 创建发帖表单组件,包含标题和内容输入框,以及提交按钮。使用 v-model 绑定表单数据。 <template> <div>…

vue 实现loading

vue 实现loading

Vue 实现 Loading 的方法 使用 v-if 和 v-show 控制显示 在 Vue 中可以通过 v-if 或 v-show 控制 loading 组件的显示与隐藏。v-if 会动态创建或销毁…

vue模版实现

vue模版实现

Vue 模板实现方法 Vue 模板是 Vue.js 的核心特性之一,用于声明式地将 DOM 绑定至底层 Vue 实例的数据。以下是几种常见的 Vue 模板实现方式: 单文件组件(SFC) 使用 .v…