将新项目附加到 Vue 2 中的列表

Posted

技术标签:

【中文标题】将新项目附加到 Vue 2 中的列表【英文标题】:Append new Item to a list in Vue 2 【发布时间】:2017-12-24 04:58:36 【问题描述】:

我有一个非常简单的表单,它从用户那里获取 nameage 并将其添加到列表中。

您可以在JSFiddle 上查看。

这里是 html

<div id="app">
<ul>
  <li v-for="user in users"> user.name +' '+ user.age </li>
</ul>
<hr>
  <form v-on:submit.prevent="addNewUser">
    <input v-model="user.name" />
    <input v-model="user.age" />
    <button type="submit">Add User</button>
  </form>
</div>

这里是 Vue 代码:

new Vue(
   el: '#app',
   data: 
    users: [name:"Mack", age:20],
    user: name:"", age:0
   ,
   methods: 
     addNewUser() 
        this.users.push(this.user);
     
   
);

问题

问题是我试图将多个用户添加到列表中。如您所见,当我为新用户输入新值时,最近添加的用户的先前值也会发生变化!

我该如何解决?

【问题讨论】:

【参考方案1】:

当您将this.user 推送到数组时,您正在推送对该数据的引用。相反,使用来自 user 对象的数据创建一个新对象:

this.users.push( name: this.user.name, age: this.user.age )

【讨论】:

【参考方案2】:

您应该创建一个应该与数据分离的新对象。

new Vue(
   el: '#app',
   data: 
    users: [name:"Mack", age:20],
    user: name:"", age:0
   ,
   methods: 
     addNewUser() 
        let newUser = 
           name: this.user.name,
           age: this.user.age
        ;

        this.users.push(newUser);
     
   
);

我还要建议一件事;我看到您通过编写 user.name +' '+ user.age 来插入姓名和年龄的值,而您可以将其转换为计算属性并使其更可重用。

【讨论】:

【参考方案3】:

如果你使用lodash,试试这个。

this.users.push(_.cloneDeep(this.user))

【讨论】:

以上是关于将新项目附加到 Vue 2 中的列表的主要内容,如果未能解决你的问题,请参考以下文章

将项目附加到列表理解中的列表

将项目附加到列表列表中的指定列表(Python)[重复]

将单个项目附加到熊猫系列中的列表

为啥在将项目附加到现有列表时会得到“无”项目? [复制]

使用Python中的多处理将项目附加到列表中

如何使用 Vue draggable 将组件列表中的项目拖动到另一个组件中的列表?