angular - 在 Angular 中,事件发射器上的后缀“更改”是否在内部做一些特殊的事情
问题描述
我不确定我是否在这里有心理扭曲,或者我是否刚刚学到了一些新东西。
我有一个具有以下输入和输出的组件。
@Input() open: boolean = false;
@Output() openChange = new EventEmitter<boolean>();
在我的代码中:
toggle(e) {
this.open = !this.open;
this.openChange.emit(this.open)
}
现在,在我的父组件中,我可以成功地使用双向数据绑定到组件:
<app-foo [(open)]="value"> Is Open: {{open}}
这让我摸不着头脑。如果我将输出更改为这样
@Output() openChangeX = new EventEmitter<boolean>();
//...
this.openChangeX.emit(this.open)
甚至
@Output() openXChange = new EventEmitter<boolean>();
//...
this.openXChange.emit(this.open)
双向数据绑定不再起作用。我所做的只是更改名称。将“更改”添加到匹配的输入变量是否在 Angular 内部做一些允许这样做的事情。我找不到任何关于此的文档。我还删除了该this.openChange.emit(this.open)
行并将其替换为this.cd.detectChanges()
想知道事件是否强制重新读取open
变量。没运气。
在我看来, varx 和 varxChange 会导致某种我不知道的关系。任何澄清将不胜感激,即使只是指向我忽略的现有文档的指针。
解决方案
看了这个之后,我终于找到了这篇文章。
https://medium.com/@preethi.s/angular-custom-two-way-data-binding-3e618309d6c7
所以是的,似乎添加“更改”确实会产生影响。
这里的神奇之处在于事件名称 amountChange 中的后缀“Change”。如果属性绑定名称为“x”,则事件绑定名称应为“xChange”。只有这样 Angular 才能识别banana-in-a-box [()] 语法。
推荐阅读
- fonts - 什么是最佳字体大小(相对于认知负荷)?
- form-recognizer - 我们可以为多种类型的表单训练一个模型吗?
- azure - 关于延迟使用云数据库存储同步数据的最佳实践
- linkedin - 社会行为总结的错误值?
- ios - 是否有任何第三方平台可以根据 BPM 获取曲目
- c# - 一次运行所有测试会导致其中一些测试失败,但是当它们被单独解雇时,它们可以正常工作
- python - 用 Python 获取 100 个最长的电影标题
- reactjs - 嵌套数组中的组件
- google-cloud-platform - 重置后无法登录谷歌云虚拟机实例
- c++ - 文本文件 Cfile C++ 中的行数