@Input 是否提供双向绑定?

2023-12-31

我认为@Input的工作方式会直接给出一个大大的“不!”对于这个问题。然而,今天我偶然发现了一些奇怪的行为,或者也许我一直对@Input 的想法是错误的。

我做了一个堆栈闪电战 https://stackblitz.com/edit/angular-xjbtis?file=src%2Fapp%2Fapp.component.ts来展示问题。这种情况发生在 Angular 7.0.1 的 stackblitz 中,但在我的本地项目中,它也发生在 Angular 6.1.2 上。

stackblitz 显示了一个具有对象的简单父组件。该对象通过@Input传递给子组件。子组件和父组件都有一个改变对象的函数。它们还都在模板中显示对象的值。

我期望看到当父级更改对象时,它也会在子级中更改它。然而没想到,当孩子改变对象的时候,也为父母改变了。然而,stackblitz 确实显示了这种行为。我一直认为您需要通过 @Output 显式发出一个事件,以向父组件发送一个流,并从子组件那里更改它。


答案是不”。在您的示例中,您传递给的值@Input属性是对对象的引用。如果您有双向绑定,您可以将一个新对象分配给子组件中的该属性:

this.thing = { name: "world", nbm: 10 };

父组件中相应的属性也会相应更新。事实并非如此,正如您所看到的这次堆栈闪电战 https://stackblitz.com/edit/angular-hmkb6n.

但是,由于父组件和子组件具有对同一对象的引用,因此它们都可以修改其属性之一,并且将在另一个组件中观察到该更改。


为了实现双向绑定,可以添加一个@Output具有相同名称的属性,后跟Change,并在发生更改时发出事件:

@Input() thing: any;
@Output() thingChange = new EventEmitter();

setNewObject(){
  this.thing = { name: "world", nmb: 10 };
  this.thingChange.emit(this.thing);
}

如果使用双向绑定语法,则更改将反映到父组件:

<child2 [(thing)]="thing"></child2>

See 这次堆栈闪电战 https://stackblitz.com/edit/angular-elswfz进行演示。


如果你想阻止子组件修改原始对象,你应该绑定对象属性而不是对象本身:

@Input() thingName: string;
@Input() thingNmb: number;
<child [thingName]="thing.name" [thingNmb]="thing.nmb"></child>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Input 是否提供双向绑定? 的相关文章

随机推荐

  • 在内核模式下读取/写入 Linux 上的 EFI 变量

    我正在研究 Linux UEFI 我想通过我的驱动程序代码访问 efi 变量 目前我正在寻找像 efi get variable 这样的 linux efi h API 但我不知道如何从我的驱动程序代码中调用这些 API struct ef
  • 如何在opencv-python中填充canny边缘图像

    I have an image for example I apply the Canny edge detector and get this image 我该如何填充这张图片 我希望边缘包围的区域是白色的 我该如何实现这一目标 您可以在
  • PHP/Mysql 日期时间比较?

    我正在尝试做这样的事情 if datetime system date gt 15 minutes false if datetime system date lt 15 minutes true 但我完全迷路了 我不知道如何在 PHP 中
  • 将图像保存到给定位置

    我想截取 iPhone 应用程序视图的屏幕截图并将图像保存到给定位置 我下面的代码将图像保存到照片库 但我想将其保存到其他给定位置 可以这样做吗 请帮我起来 我的代码在这里 UIGraphicsBeginImageContext self
  • Python Paramiko SSH 会话闲置数小时后不活动

    我正在使用 Python Paramikossh exec command从主机向从机发送命令 从 CentOS 到 CentOS 主设备向从设备发送命令并等待 休眠或做一些有意义的事情 从设备完成命令 从站大约需要 10 个小时才能完成命
  • 获取给定 SyntaxTree 中的行号的 SyntaxNode

    我想获取给定位置 lineNumber 的一行的 SyntaxNode 下面的代码应该是不言自明的 但如果有任何问题请告诉我 static void Main string codeSnippet using System class Pr
  • 压缩从浏览器发送的 HTTP Post 数据

    我想用 Javascript 将压缩的 POST 数据发送到我控制的服务器 有没有办法让HTTP层来处理压缩 我正在发送 JSON 如果我将内容类型设置为 GZIP deflate 浏览器会自动压缩它 然后带有 deflate mod 的
  • PHPIniDir 在 Windows 7 下损坏?

    我有一台在 Windows XP 机器上运行的服务器 使用 Apache2 PHP 和 MySQL 我最近升级到 Windows 7 但在运行时遇到了问题 Apache 工作正常 PHP 工作正常 但我似乎无法让它与php ini file
  • 如何在打字时启用历史选择列表

    我正在尝试成为 PowerShell 的一员 并发现了一项我非常喜欢的功能 但不知道如何使其始终如一地工作 PowerShell 可以进入一种模式 在您键入时显示增量更新的历史项目选择列表 然后 您可以通过向上和向下箭头浏览它们来选择要运行
  • Ruby 函数检查一个数字是否能被 5 整除并且是偶数

    def is even n remainder when divided by 2 n 2 if remainder when divided by 2 0 return true else return false end end def
  • 在 Flutter 中使用 iOS 行为时更改 ListView 反弹颜色

    当创建一个ListView 文档中的示例 https flutter io docs cookbook lists basic list 当使用带有 Flutter 的 iOS 模拟器滚动时 我们如何更改出现在列表顶部的反弹颜色 ListV
  • 如何使用 Cython 进行覆盖率分析

    我正在尝试使用一些 Cython 代码运行覆盖率分析pytest cov和工作服 io 我已经构建了启用跟踪的扩展模块 并借助以下链接运行分析 http docs cython org src tutorial profiling tuto
  • 如果远程仓库不可用,如何为 Spring Cloud Config 服务设置本地后备配置?

    我们计划在我们的服务中使用 Spring Cloud Config 我们最担心的是 当容器启动时 它依赖 github 始终可用 以便它可以拉取配置文件 如果 github 宕机 缓解该问题的最佳实践是什么 我正在考虑存储配置的本地文件夹作
  • 在单个 build.gradle 文件中多次调用同一任务

    我有一个自定义 Gradle 插件 它将从模板文件生成 Java 文件 我在不同位置有几个这样的模板文件 我需要 编译 所有这些文件以生成我需要的 Java 文件 获得文件后 我想将它们打包到 jar 中 我认为可以做到这一点的一种方法是从
  • 在 .NET 中打印 - 从毫米到像素的转换

    如何将用户输入从毫米转换为像素 以便将其打印在页面的正确位置 我使用以下代码 private void document PrintPage object sender PrintPageEventArgs e float dpiX e G
  • zip 函数帮助处理元组

    我希望有人能帮助我解决我遇到的问题 我有大量的元组 gt 500 如下所示 2 1 3 6 1 2 5 5 3 0 1 6 10 1 1 4 0 3 3 0 我的代码片段如下 sum1 A B C D creates a tuple of
  • get 返回 hazelcast 3.5 中超类 ArrayList 的值

    我在使用 hazelcast 3 5 时遇到序列化问题 当一个 hazelcast 客户端 Java 输入 class 的值时 public class MyType extends ArrayList
  • 使用 Firestore 和 Typescript 实现动态 Where 条件

    我正在尝试实现存储库模式火库Firebase 和打字稿 Code import firestore from firebase admin import ISearchCriteria from ISearchCriteria export
  • libgcrypt.lib 中未解析的外部符号

    如果我在 lib library 文件中发现未解析的外部符号 我必须做什么 如果我在 c 或 cpp 中发现无法解析的外部符号 我可以修复它 但是当我在 lib library 文件中发现未解析的外部符号时 我该如何解决这个问题 就我而言
  • @Input 是否提供双向绑定?

    我认为 Input的工作方式会直接给出一个大大的 不 对于这个问题 然而 今天我偶然发现了一些奇怪的行为 或者也许我一直对 Input 的想法是错误的 我做了一个堆栈闪电战 https stackblitz com edit angular