当对象中的字段发生更改时如何从 v-model 数组中删除对象

Posted

技术标签:

【中文标题】当对象中的字段发生更改时如何从 v-model 数组中删除对象【英文标题】:How to remove object from v-model array when field in the object has changed 【发布时间】:2020-05-27 22:56:44 【问题描述】:

我已经设置了一个带有复选框输入的 vue.js 文件,当单击该复选框时,它将向数组中添加一个对象。但是我有另一个选择框输入可以更改对象中一个字段的值,因此当我再次单击复选框以取消选择该对象时,因为原始值和更改后的值不同,复选框上的 v-model只需将另一个对象添加到数组中,而不是删除仍然具有 2 个具有相同值的字段的对象。

如何让 v-model 从数组中删除对象,即使 1 个字段值已更改?

<template>
  <div>
    <input type="checkbox" v-model="user" :value=" name: displayName, email: userEmail, level: '' " />
    <select v-model="user.level">
      <option value="low"> Low </option>
      <option value="middle"> Middle </option>
      <option value="high"> High </option>
    </select>
  </div>
</template>

<script>
export default 
  data: () => (
    user: []
  )

</script>

一个包含对象的示例用户数组。

user: [
  
    name: 'John',
    email: 'john@gmail.com',
    level: 'low'
  
]

因此,当我将 John 添加到数组中时,我可以添加和删除他。但是当我更改他的级别时,因为 level 不再是一个空白字符串,所以再次单击 Johns 复选框将他再次添加到 users 数组而不是删除他。

有没有一种方法可以使 v-model 能够根据一个字段的值从数组中删除一个对象,例如'name',因为该值不会改变,而不是将整个对象与 users 数组中已有的对象进行匹配?

【问题讨论】:

请提供minimal reproducible example 例如,您在哪里添加/删除用户?最好是一个工作演示,但至少提供最少的可重现代码。 【参考方案1】:

您的user 是一个数组,您的选择设置为模型user.level。这样做是将属性level 放到数组中。您想要的是对该数组中的单个对象执行此操作。

你缺少的是v-for

<div v-for="_user in user">
    <input type="checkbox" v-model="_user" :value=" name: displayName, email: userEmail, level: '' " />
    <select v-model="_user.level">
      <option value="low"> Low </option>
      <option value="middle"> Middle </option>
      <option value="high"> High </option>
    </select>
  </div>

也许应该将用户数组命名为users

【讨论】:

以上是关于当对象中的字段发生更改时如何从 v-model 数组中删除对象的主要内容,如果未能解决你的问题,请参考以下文章

v-model 中的空值

v-model不会通过switch更改数据,并在vuejs中选择下拉菜单

当对象 Hashcode 更改时,Hashmap 或 Hashset 中的查找会发生啥

当redux store中的值发生变化时,如何更新formik中的特定表单字段?

为啥我的 Vue 应用程序中的 v-model 输入会在更改时触发突变错误?

sql 两张结构相同的表,当A表中的某个字段发生变化时,B表中的字段更新成相对应的值。