Cześć :)
W Angularze, aby tworzyć customowe kontrolki można wykorzystać ControlValueAccessor. Dzięki niemu, na customowym elemencie możemy zrobić bindowanie reaktywnej kontrolki poprzez formControlName = 'name'. Po zaimplementowaniu metod z interfejsu ControlValueAccessora mamy połączenie w obie strony z inputem oraz kontrolką. Jednakże problem pojawia się w przypadku, kiedy w customowym komponencie chciałbym otrzymać inne dane z kontrolki oprócz samej jej wartości (np. pole errors). Z tego co do tej pory udało mi się znaleźć to za pomocą ControlValueAccessora możemy przekazać tylko wartość lub w przypadku ValidationProvidera z komponentu ustawić errory dla reaktywnej kontrolki, ale już nie odczytać.
Ogólnie udało mi się uzyskać efekt jaki chce - połączenie kontrolki z customowym inputem wraz z odczytaniem errorów itd. Ale rozwiązanie to polega na tym, że przekazuje sobie do customowego inputa po prostu referencję do całego obiektu FormControl np.
<custom-input
[myControl]='form.get('controlName')
></custom-input>
Następnie w custom-input subskrybuję się.
this.formControl.statusChanges.subscribe(data => {
// read value, errors etc.
});
Jednakże czy takie rozwiązanie jest ok ? :)
Poniższy zapis:
<custom-input
formControlName='nameControl'
></custom-input>
Wydaje mi się bardziej elegancki, ale jak wspomniałem wcześniej - jest problem z odczytaniem errorów, które chcę wyświetlać w cutom-input, a nie w rodzicu poprzez sprawdzenie błędów z jakiegoś formGroup.
<p *ngIf="form.get('nameControl').invalid> ... </p>
Mam nadzieję, że ktoś zrozumie o co mi chodzi :D
Pozdrawiam :)