我对@directive of angular 2有一些疑问,
1-如果选择器必须是这样的:
selector: '[validateEqual][formControlName],[validateEqual][formControl]
和validateEqual必须是像这样的构造函数
constructor( @Attribute('validateEqual') public validateEqual: string,
@Attribute('reverse') public reverse: string) {
}
它的意思是什么@Attribute
如果提供者中有multi = true且使用现有
答案 0 :(得分:0)
选择器:这意味着该指令匹配具有属性validateEqual
和formControlName
或formControl
@Attribute
注入静态属性的值。
通常,使用@Input()
将属性读入指令。 @Input()
还支持在绑定到属性(或属性更改)的值时更新输入的绑定。 @Input()
或ngOnInit()
中提供了ngOnChanges()
值,而@Attribute()
注入的值在构造函数中可用,但如果稍后更改,则不会更新。
使用以下代码@Attribute('validateEqual') would set
public validateEqual to
foo`
<div validateEqual="foo" formControlName="bar">
<!-- this doesn't work with `@Attribute('validateEqual')`
because the attribute value is not static -->
<div [validateEqual]="foo" formControlName="bar">
multi: true
表示一个提供者令牌提供了一系列元素。例如,路由器支持的所有指令routerLink
,router-outlet
由ROUTER_DIRECTIVES
提供
如果使用令牌ROUTER_DIRECTIVES
注册了新提供程序,则它将覆盖先前注册的指令。如果设置multi: true
(在第一个注册的和新提供者上),则新指令将添加到先前注册的指令中,而不是覆盖。ROUTER_DIRECTIVES
时(constructor(@Inject(ROUTER_DIRECTIVES) directives) {}
)会注入一组指令实例。注入ROUTER_DIRECTIVES
通常没有意义。我只是将它用作一个例子,因为它是multi: true
。