我有以下组件:

@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分配表单控件的情况。

最佳答案

看来jector.get(NgControl)发出了弃用警告,所以我想提出另一种解决方案:

constructor(public ngControl: NgControl) {
  ngControl.valueAccessor = this;
}

技巧还在于从providers数组中删除NG_VALUE_ACCESSOR,否则会得到循环依赖。

有关此的更多信息,请参见this talk by Kara Erickson of the Angular team

关于angular - 如何从ControlValueAccessor获取FormControl实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45755958/

10-08 22:27