Vue JS:使用基于提供的索引的 splice() 方法删除数组中动态渲染的组件,不起作用

Posted

技术标签:

【中文标题】Vue JS:使用基于提供的索引的 splice() 方法删除数组中动态渲染的组件,不起作用【英文标题】:VueJS: Deleting dinamically rendered component in array with splice() method based on provided index, doesn't work 【发布时间】:2020-05-24 21:47:30 【问题描述】:

背景: 我正在制作一个简单的待办事项应用程序,您可以在其中添加和删除项目。

问题: 当我单击特定项目上的“删除”按钮时,会发生这种情况:它总是删除列表中的最后一个项目,而不是单击的项目。

实施细节: 我有一个父子组件。当数组被填充时,子组件在 v-for 循环的帮助下动态渲染。单击“删除”按钮时,子组件会向父组件发出删除事件。父组件使用“detach()”方法处理删除功能。

代码示例 https://codesandbox.io/s/polished-pine-nnbfo

我正在使用 splice() 方法从数组中删除特定组件,虽然我提供了触发删除事件的组件的正确索引,但它总是从数组中删除最后一个组件,而我没有知道为什么。有人可以指出明显的吗?

【问题讨论】:

【参考方案1】:

当您只需要 1 个数组 - 包含 ToDo 项的数组时,您使用了太多数组。

<template>
  <div id="app">
    <label>
      First Name:
      <input type="text" name="firstName" v-model="firstName">
    </label>
    <label>
      Last Name:
      <input type="text" name="lastName" v-model="lastName">
    </label>
    <label>
      Email:
      <input type="email" name="email" v-model="email">
    </label>
    <button class="btn" @click="add">Send</button>

    <Todo
      v-for="(item,idx) in todoItems"
      :key="idx"
      :id="item.id"
      :first-name="item.firstName"
      :last-name="item.lastName"
      :email="item.email"
      @btnClick="detach(idx)"
    />
  </div>
</template>

<script>
import Todo from "./components/todo";

export default 

  name: "App",
  components: 
  
    Todo
  ,

  data() 
  
    return 
      id: 0,
      firstName: '',
      lastName: '',
      email: '',
      todoItems: [],
    ;
  ,

  methods: 
    add() 
      this.todoItems.push(
        firstName: this.firstName,
        lastName: this.lastName,
        email: this.email,
        id: ++this.id,
      );
      this.firstName = '';
      this.lastName = '';
      this.email = '';
    ,

    /** the delete function **/
    detach(index) 
    
      this.todoItems.splice(index, 1);
    
  
;
</script>

【讨论】:

以上是关于Vue JS:使用基于提供的索引的 splice() 方法删除数组中动态渲染的组件,不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Splice 没有从给出的索引中拼接?

Vue:数组splice方法的使用

vue或js中splice和join使用方法

vue或js中splice和join使用方法

Vue 之 push、pop、shift、unshift、splice、sort、reverse

js splice 从数组某位置 删除或增加元素