2017-08-18 22 views
0

得到FormControl例如我有以下组成部分:如何从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 { 
    ... 
} 

我可以分配和改变通过这些输入值:

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

不过,我需要的组件有直接访问分配的formControl,因为我需要根据其状态添加样式。

通过创建一个@Input()formControl不能解决问题。因为它不包括窗体控件通过formControlName分配的情况。

回答

3

一个可能的解决方案是通过Injector获得NgControl例如:

import { NgControl } from '@angular/forms'; 
export class PasswordComponent implements ControlValueAccessor { 
    ... 
    ngControl: NgControl; 

    constructor(private inj: Injector) { 
    ... 
    } 

    ngOnInit() { 
    this.ngControl = this.inj.get(NgControl) 
    } 

那么你可以得到类似的地位

ngControl.control.status 

又见