【发布时间】:2016-12-25 08:15:26
【问题描述】:
在阅读@Input() 和@Output() 时,我发现我们可以使用别名来代替装饰器的属性名称。
示例
class ProductImage {
//Aliased
@Input('myProduct') product: string;
//Un-aliased
@Input() product: string;//not aliased
}
HTML
//Aliased attribute
<SomeComponent [myProduct] = "Product Name"></SomeComponent>
//Un-aliased attribute
<SomeComponent [product] = "Product Name"></SomeComponent>
Angular 官方documentation 说:
有时我们希望输入/输出属性的公共名称不同于内部名称。 属性指令经常出现这种情况。指令消费者期望绑定到指令的名称。例如,当我们将带有 myClick 选择器的指令应用于标签时,我们希望绑定到也称为 myClick 的事件属性。
还有This教程简单解释一下:
别名让我将属性名称覆盖为别名而不是原始属性名称
除此之外,我无法在 SO 上或通过 Google 找到关于别名 @Input() 和 @Output() 的任何其他内容。
我想知道的是:
- “别名”试图实现什么?
- 我们应该经常使用“别名”吗?
【问题讨论】:
-
这取决于你和你的团队风格约定
-
如果您将输入绑定到私有属性,最好遵循 ts 样式指南并在名称前加上下划线,例如@Input('heroName') private _heroName
-
“'aliasing' 试图达到什么目的?” -- 使用别名可以实现 UI 的可靠和长期可测试性。当然,随着时间的推移,代码库的更改和变量的重命名等等,但如果定期实现别名,那么它允许构建 UI 测试,而不必担心变量名称的更改是否会破坏这些 UI 测试。
标签: javascript angular typescript