Ich bin ein wenig verwirrt.Wann sollten eckige Klammern [] in Anweisungen @Inputs verwendet werden und wann nicht?
Sehen Sie diese einfache Richtlinie:
@Directive({
selector: '[myDirective]'
})
export class MyDirective {
private text: string;
private enabled: boolean;
@Input() myDirective:string;
@Input('myText')
set myText(val: string) {
this.text = val;
}
@Input('myEnabled')
set myEnabled(val: boolean) {
this.enabled = val;
}
ngOnInit() {
console.log("myDirective string: " + this.myDirective);
console.log("myText string: " + this.text);
console.log("myEnabled boolean: " + this.enabled);
}
}
wenn meine html wie folgt aussehen:
<div [myDirective]="myDefaultText" [myEnabled]="true" [myText]="abc"></div>
Der Ausgang wird sein:
myDirective string: myDefaultText real value // good
myEnabled boolean: true // good
myText string: undefined // Why?
Wenn ich die [Löschen] aus myText
:
<div [myDirective]="myDefaultText" [myEnabled]="true" myText="abc"></div>
wird der Ausgang sein:
myDirective string: myDefaultText real value // good
myEnabled boolean: true // good
myText string: abc // GOOD
ich auch die []
von myEnabled
entfernen kann und es auch funktionieren. Also hier ist meine Verwirrung - wenn ich eckige Klammern verwenden muss []
und wenn nicht, während ich möchte, dass der Benutzer myDirective
verwenden wird nie fragen müssen, ob oder wenn nicht, ich denke, die eckigen Klammern []
sollte immer da sein . Sind sie nicht?
Ich habe nicht einmal gedacht, dass das tatsächlich passiert, bist du sicher?Der Fragesteller erwähnte, dass '[myDirective] =" myDefaultText "' die Eingabe "myDefaultText real ** value **" lieferte, obwohl ich den tatsächlichen Wert von 'myDefaultText' meinte, was bedeutet, dass es immer noch als Ausdruck behandelt wird. – Amit
Ich lag falsch. Verpasste den "echten Wert". –
Dies wird in der aktuellen Angular 4-Dokumentation auf [dieser Seite] (https://angular.io/guide/template-syntax#one-time-string-initialization) behandelt. – 2Aguy