【问题标题】:What is the main difference between the decorators @Input() and @Attribute() in Angular2?Angular2 中的装饰器 @Input() 和 @Attribute() 之间的主要区别是什么?
【发布时间】:2017-02-13 18:30:27
【问题描述】:

我已经看到 @Attribute() 在 Directives 中通常用作构造函数中的参数,如下所示:

export class EqualValidator implements Validator {
    constructor( @Attribute(‘validateEqual’) public validateEqual: string) {}
    validate(c: AbstractControl): { [key: string]: any } {}
}

和 @Input() 在组件中使用如下:

export class UserProfile {
    @Input() user;
    constructor() {}
}

然后你可以在@Input()的情况下通过属性绑定将数据传递到模板中的这些变量中。

这些装饰器之间的主要区别是什么?什么时候应该使用它们?

【问题讨论】:

    标签: angular


    【解决方案1】:

    @Input():用于将值传递到指令中或将数据从一个组件传递到另一个组件(通常是父组件到子组件)。

    @Attribute():您可以检索组件/指令的宿主元素中可用属性的常量值,它必须与组件或指令的构造函数的参数一起使用

    希望对您有所帮助!

    【讨论】:

    • 感谢您的回答。我理解@Input() 的解释,但不理解@Attribute()。属性的常量值是什么意思?我也不明白为什么在某些情况下你会想要使用@Attribute() 而不是@Input()。
    • 通过@Attribute,我们可以将html上属性的常量值映射到组件上的属性。
    • 常量值是什么意思?就像一个无法改变的字符串?它必须是一个字符串吗?或者它可以是一个复杂的对象?您什么时候想使用 @Attribute() 而不是 @Input() ?我还是不明白他们之间的区别。我知道一个在构造函数中被声明为参数,一个被声明为属性。
    • 请查看plnkr.co/edit/Zemj0H7CHm8JmNpI8qkC?p=preview 的简单示例。
    • 由于您的最后一个问题尚未得到回答,我将为未来的访问者这样做:是的,当涉及到输入属性时,性能是关键 - 如果您知道该值将是恒定的.有关更详细的版本,请参见此处:netbasal.com/…
    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 2015-08-22
    • 2015-08-06
    • 2011-03-06
    • 2013-12-23
    • 2017-04-28
    • 2011-04-14
    • 2010-09-17
    相关资源
    最近更新 更多