javascript - 如果条件为真或假,角度数组内容会发生变化?意外行为
问题描述
我有 3 个有角度的兄弟组件。第一个是边栏,它调用返回对象数组的 API。我正在用一堆列表项和返回的数据填充一个无序列表。该组件与问题无关。
然后在第二个组件中,我正在调用服务中的方法,该方法进行 API 调用,返回具有各种属性的对象。然后单击一个按钮,我正在调用另一个方法,该方法正在检查数组是否包含与从 API 返回的对象具有相同属性的对象。如果没有这样的对象,我将它添加到数组中,如果有一个具有给定属性的对象(在我的例子中是 id)我们什么也不做。
由于很难解释整个过程,我试图在那个stackblitz 示例中重现整个场景。
去检查一下,按第一个按钮,然后按第二个按钮。我无法理解的是,为什么当我们单击第一个按钮,然后单击第二个按钮时,尽管我们正在检查该对象是否存在于数组中并且是否存在,但数组中的对象会被更新 - 我们甚至不调用服务中的方法,但它仍然以某种方式更新。我在这里想念什么?
解决方案
@Jason White 的回答解释了正在发生的事情。我会建议替代解决方案。如果条件不匹配,则不要更新对象:
addToSlip(receivedObj, userPick, userPickValue) {
const found = this.slip.some(el => el.id === this.obj.id);
console.log(found);
if (!found) {
receivedObj.userPick = userPick;
receivedObj.userPickValue = userPickValue;
console.log("Not found, we add it to the array!");
this.service.addToSlip(this.obj);
} else {
console.log("Duplicate! We don't add it!");
}
}
推荐阅读
- git - 使用 shell 脚本批量克隆 git 存储库时添加目标文件夹
- php - 如何使用 php 播放在数据库中存储为 BLOB 格式的 AVI、FLV 和 Mp4 视频?
- json - Azure 数据工厂 - 内容类型为 JSON,但响应为 XML
- haskell - 如何构建 Haskell 应用程序?
- php - Symfony 令牌在订阅者中为空
- ios - crash - 重击 @escaping @callee_guaranteed (@unowned CMTime)
- javascript - 如何根据 HTML 中的变量值禁用链接?
- node.js - 无法在 Node.js 中正确生成 crc32c 校验和
- mongodb - 适用于 Windows 的 Mongo Spark 连接器
- laravel - 有没有办法更改在 laravel AKA 中调用 view() 函数时呈现的实际位置文件如何在 laravel 中设置视图文件路径