Das myHighlight
Attribut-Direktive in den dev guide verwendet die myHighlight
Namen sowohl als Attributselektor:Warum funktioniert einfach [myHighlight] = "..." für eine Attributrichtlinie?
selector: '[myHighlight]',
und eine Eingang Eigenschaft:
@Input('myHighlight') highlightColor: string;
Ich finde es seltsam/eingängig, dass wir nicht haben, um das Selektorattribut so zu spezifizieren (obwohl, wenn wir es so schreiben, es immer noch funktioniert):
<span myHighlight [myHighlight]="color">highlight me</span>
Stattdessen müssen wir nur den Eingang Eigenschaft angeben, und wir auf magische Weise die Richtlinie auch erhalten:
<span [myHighlight]="color">highlight me</span>
Ich mag nicht diese „Abkürzung“/syntaktischer Zucker/Magie, da es sieht aus wie wir Re Bindung an die myHighlight
Eigenschaft des span
Elements, anstatt was tatsächlich passiert: Wir sind verbindlich an die myHighlight
Eigenschaft der myHighlight
Attribut-Direktive. Wir können also nicht einfach feststellen, welches Element/welche Komponente/Direktive die myHighlight
-Eigenschaft ist.
Warum funktioniert es so?
HTML-Fragment vor:
<div [accessKey]="...">
Ist accessKey
ein HTML-Element-Eigenschaft oder ein Attribut-Richtlinie mit einer Eingangs Eigenschaft auch accessKey
benannt? (. FYI, accessKey
ist eine gültige HTML-Element-Eigenschaft, so dass dieses Beispiel ist kein Attribut Richtlinie)
Kommen wir zurück auf die Highlight-Richtlinie ... wenn ich den Eingang Eigenschaftsnamen highlightColor
ändern:
@Input() highlightColor: string;
Dann muss ich zusammen mit der Eigenschaft Bindung des Attributselektor angeben, die ich weniger zweideutig finden:
<span myHighlight [highlightColor]="color">highlight me</span>
So ist die „Abkürzung“ nur dann, wenn die Eingangseigenschaftsnamen des Attributselektor passt zu funktionieren scheint.
Update: es scheint structural directives Verwenden Sie den gleichen Trick/Shortcut. Z. B.
<p *ngIf="condition">
text here
</p>
entspricht
<template [ngIf]="condition"> <--- binds input property ngIf to NgIf directive, not to template
<p>
text here
</p>
</template>
ich nicht das Mischen von Eigenschaftsnamen und Wähler einfach nicht, wie.
Ich habe mir gerade die Dokumente angesehen. Dort gibt es einige subtile Dinge: "Dieser @Input-Decorator fügt der Klasse Metadaten hinzu, die die highlightColor-Eigenschaft für die Eigenschaftsbindung unter dem myHighlight-Alias verfügbar macht." Auch das: https://angular.io/docs/ts/latest/guide/attribute-directives.html###why-input –
Es ist nur einer der möglichen [Selektoren] (https://github.com/angular /angular/blob/master/modules/angular2/src/compiler/selector.ts#L15). Sie können das verwenden, das besser zu Ihnen passt. –
Ich denke, das [PR] (https://github.com/angular/angular/pull/5914) kann auch verwandt sein. –