我的Angular应用程序中有一个自定义表单控件组件,它实现了ControlValueAccessor接口。
但是,我想访问与我的组件关联的FormControl实例。我正在使用FormBuilder的反应形式,并使用formControlName属性提供表单控件。
那么,我如何从自定义表单组件内部访问FormControl实例?
该解决方案诞生于Angular存储库中的
the discussion。如果您对此问题感兴趣,请务必阅读或更好地参与。
原文链接:https://www.f2er.com/angularjs/143861.html我已经研究了FormControlName指令的代码,它激发了我编写以下解决方案的灵感:
@Component({ selector: 'my-custom-form-component',templateUrl: './custom-form-component.html',providers: [{ provide: NG_VALUE_ACCESSOR,useExisting: CustomFormComponent,multi: true }] }) export class CustomFormComponent implements ControlValueAccessor,OnInit { @Input() formControlName: string; private control: AbstractControl; constructor ( @Optional() @Host() @SkipSelf() private controlContainer: ControlContainer ) { } ngOnInit () { if (this.controlContainer) { if (this.formControlName) { this.control = this.controlContainer.control.get(this.formControlName); } else { console.warn('Missing FormControlName directive from host element of the component'); } } else { console.warn('Can\'t find parent FormGroup directive'); } } }
我将父FormGroup注入组件,然后使用通过formControlName绑定获得的控件名从中获取特定的FormControl。
但是,请注意,此解决方案是专门针对在host元素上使用FormControlName指令的用例而定制的。它在其他情况下不起作用。为此,您需要添加一些额外的逻辑。如果您认为这应该由Angular解决,请务必访问the discussion。