Angular2:配对选择器在@Directive中做了什么

时间:2016-07-01 05:54:21

标签: angular angular2-template angular2-directives angular2-forms

我对@directive of angular 2有一些疑问,

I'm following this tutorial

1-如果选择器必须是这样的:

selector: '[validateEqual][formControlName],[validateEqual][formControl]

和validateEqual必须是像这样的构造函数

 constructor( @Attribute('validateEqual') public validateEqual: string,
    @Attribute('reverse') public reverse: string) {
}

它的意思是什么@Attribute

如果提供者中有multi = true且使用现有

1 个答案:

答案 0 :(得分:0)

  • 选择器:这意味着该指令匹配具有属性validateEqualformControlNameformControl

  • 之一的元素
  • @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表示一个提供者令牌提供了一系列元素。例如,路由器支持的所有指令routerLinkrouter-outletROUTER_DIRECTIVES提供 如果使用令牌ROUTER_DIRECTIVES注册了新提供程序,则它将覆盖先前注册的指令。如果设置multi: true(在第一个注册的新提供者上),则新指令将添加到先前注册的指令中,而不是覆盖。
    注入ROUTER_DIRECTIVES时(constructor(@Inject(ROUTER_DIRECTIVES) directives) {})会注入一组指令实例。注入ROUTER_DIRECTIVES通常没有意义。我只是将它用作一个例子,因为它是multi: true