Ich habe folgende Direktive (TextElementDirective), die 4 Eingabevariablen colorHex, fontFamily, fontWeight, fontStyle hat. Ich möchte mit dieser Anweisung die Farbe und den Stil eines Elements festlegen.Angular 2 Attribut Direktive Eingabewerte sind nicht definiert und nicht richtig eingestellt
Wenn ich diese Direktive in einer anderen Komponente als Attribut verwende, werden nicht der Stil und die Farbe des Elements festgelegt. Auch wenn Sie auf die Schaltfläche klicken, werden die Elementwerte nicht festgelegt.
Wenn ich einen Host (onmousemove) in der Direktive verwende, funktioniert es gut. Aber ich möchte die Werte beim Start einstellen.
Irgendeine Idee, was vermisse ich?
Hier ist die Testkomponente, die es verwendet.
@Component({
template:
`
<h3>Test</h3>
<div>
<span>text-element-map: </span>
<span class="text-content" text-element-map [colorHex]="colorHex"
[fontFamily]="fontFamily" [fontWeight]="fontWeight" [fontStyle]="fontStyle">Change this text</span>
<button (click)="setCurrentDesignElement()">Click</button>
</div>
`,
directives:[TextElementDirective],
changeDetection: ChangeDetectionStrategy.Default
})
export class TestComponent{
@ViewChild(TextElementDirective)
private childTextElement: TextElementDirective;
colorHex: string = "#e2e2e2";
fontFamily: string = "Arial";
fontWeight: string = "normal";
fontStyle: string = "normal";
setCurrentDesignElement(){
this.color = {
hex: "#B4B4B4",
id: 5745,
name: "Athletic Heather"
};
this.font = {
cssString: "Valera Round",
weight: "normal",
style: "italic"
};
this.colorHex = "#B4B4B4";
this.fontFamily = "Valera Round";
this.fontWeight = "normal";
this.fontStyle = "italic";
//this.childTextElement.setElement();
}
}
Es funktioniert, wenn die Richtlinie initialisiert wird. Aber wenn ich auf die Schaltfläche zum Zurücksetzen von colorHex, fontFamily usw. klicke, wird der Text nicht zurückgesetzt. Wie stelle ich sicher, dass das setElement() aufgerufen wird, wenn sich das Modell ändert? Warum übernimmt die Change Detection nicht? –
Es gibt zwei Möglichkeiten: make 'colorHex', ... setters und getters oder' ngOnInit() 'in' ngOnChanges (changes) 'ändern. 'ngOnChanges' wird jedes Mal aufgerufen, wenn sich Eingabewerte ändern. Mit meinem obigen Vorschlag sollte man 'setElement()' überhaupt nicht brauchen. –
Ja. Du hast recht. Wenn ich HostBinding verwende, brauche ich die setElement-Funktion nicht. Danke vielmals. –