2017-08-18 7 views
0

J'ai le composant suivant:Comment obtenir exemple FormControl de ControlValueAccessor

@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 { 
    ... 
} 

je peux assigner et modifier la valeur par ces entrées:

<pc-radio-button [formControl]="formControl"></pc-radio-button> 
<pc-radio-button [formControlName]="inputControlName"></pc-radio-button> 

Cependant, je besoin du composant pour la accès direct au formulaire assignControl, car j'ai besoin d'ajouter des styles en fonction de son statut.

En créant un @Input() formControl ne résout pas le problème. Comme il ne couvre pas le cas lorsque le contrôle de formulaire est assigné via formControlName.

Répondre

3

Une solution possible est d'obtenir NgControl exemple 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) 
    } 

alors vous pouvez obtenir le statut comme

ngControl.control.status 

Voir aussi