I've the following component:
@Component({     selector: 'pc-radio-button',     templateUrl: './radio-button.component.html',     providers: [         {provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => FieldRadioButtonComponent), multi: true}     ] }) export class RadioButtonComponent implements ControlValueAccessor {     ... }   I can assign and alter the value through these inputs:
<pc-radio-button [formControl]="formControl"></pc-radio-button> <pc-radio-button [formControlName]="inputControlName"></pc-radio-button>   However I need the component to have the direct access to the assigned formControl, as I need to add styles depending on its status.
By creating an @Input() formControl does not solve the problem. As it does not cover the case when form control is assigned via formControlName.
It looks like injector.get(NgControl) is throwing a deprecation warning, so I wanted to chime in with another solution:
constructor(public ngControl: NgControl) {   ngControl.valueAccessor = this; }   The trick is to also remove NG_VALUE_ACCESSOR from the providers array otherwise you get a circular dependency.
More information about this is in this talk by Kara Erickson of the Angular team.
One possible solution is to get NgControl instance via Injector:
import { NgControl } from '@angular/forms'; export class PasswordComponent implements ControlValueAccessor {   ...   ngControl: NgControl;    constructor(private inj: Injector) {     ...   }    ngOnInit() {     this.ngControl = this.inj.get(NgControl)   }   then you can get status like
ngControl.control.status   See also
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With