Mam następującą dyrektywę (TextElementDirective), która ma 4 zmienne wejściowe colorHex, fontFamily, fontWeight, fontStyle. Chcę ustawić kolor i styl elementu za pomocą tej dyrektywy.Wartości wejściowe dyrektywy kątowej 2 są niezdefiniowane i niepoprawnie ustawione.
Kiedy używam tej dyrektywy w innym komponencie, jako atrybut, nie ustawia ona stylu i koloru elementu. Nawet jeśli klikniesz przycisk, wartości elementów nie zostaną ustawione.
Jeśli używam hosta (onmousemove) w dyrektywie, działa dobrze. Ale chcę ustawić wartości podczas uruchamiania.
Każdy pomysł, czego mi brakuje?
Oto komponent testowy, który z niego korzysta.
@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();
}
}
Działa, gdy inicjalizowana jest dyrektywa. Ale kiedy klikam przycisk, aby zresetować colorHex, fontFamily, itp., To nie resetuje tekstu. Jak upewnić się, że wywołanie setElement() podczas zmiany modelu? Dlaczego wykrywanie zmian nie przejmuje kontroli? –
Istnieją dwa sposoby: make 'colorHex', ... setters i getters lub zmień' ngOnInit() 'na' ngOnChanges (changes) '. 'ngOnChanges' jest wywoływane za każdym razem, gdy zmienia się wartość wejściowa. Z powyższą sugestią nie powinieneś w ogóle potrzebować 'setElement()'. –
Tak. Masz rację. Kiedy używam HostBinding, nie potrzebuję funkcji setElement. Wielkie dzięki. –