Angular 验证不会传播到自定义表单控件ng select in

Angular 验证不会传播到自定义表单控件ng select in,angular,typescript,angular-reactive-forms,angular-ngselect,Angular,Typescript,Angular Reactive Forms,Angular Ngselect,我在Angular 9应用程序中使用了带有自定义表单控件的被动表单 我用自定义表单控件包装了我的控件 我对验证有问题。我将formControl设置为必需。应将ng invalidcss类设置为ng select automatically。但事实上,自定义表单控件无法正常工作。未设置css类,但已设置包装器类。是我做错了什么,还是这是图书馆的问题 检查闪电战: 您可以通过输入将表单组向下传递到您的子组件中,并将其设置为ng选择来解决此问题: <mycontrol formControlN

我在Angular 9应用程序中使用了带有自定义表单控件的被动表单

我用自定义表单控件包装了我的控件

我对验证有问题。我将formControl设置为必需。应将
ng invalid
css类设置为ng select automatically。但事实上,自定义表单控件无法正常工作。未设置css类,但已设置包装器类。是我做错了什么,还是这是图书馆的问题

检查闪电战:

您可以通过
输入将
表单组
向下传递到您的子组件中,并将其设置为
ng选择
来解决此问题:

<mycontrol formControlName="someControl" [parentFormGroup]="someForm" ></mycontrol>
模板:

<ng-select #mySelect
           [formGroup]="parentFormGroup"
...

DiPix,问题是要将控件状态CSS类添加到自定义控件中,而不是添加到属于内部控件的ng select中

您可以注入ngControl并检查control.control.invalid和control.control.toucted

constructor(private injector:Injector){}
ngOnInit()
{
   this.control = this.injector.get(NgControl);
}
然后你可以用一些像

  <ng-select #mySelect  [ngClass]="{'ng-invalid':control?.control.invalid,
                                    'ng-touched':control?.control.touched}"
   ....>
你可以用

<ng-select #mySelect  [ngClass]="parentClass" 
  ...>
而你用的是

    <mycontrol [control]="someForm.get('someControl')"></mycontrol>


您可以看到在

中变得多么简单,所以基本上什么时候应该使用自定义表单控件?在我看来,如果向控件添加新的外观,自定义表单控件是有用的。datePicker是“自定义表单控件”的一个很好的例子,multi-select是另一个很好的例子,或者是一个仪表,或者是一个下拉时显示表格的组合,(我怀疑是否有带掩码的输入)或者。。。。如果只想“分组”输入,例如询问号码、到期日期和CVC的信用卡-即使显示卡类型-或带有街道、城市、国家和CP的一组地址,我更喜欢使用组件。但事实上,这只是个人意见。我只是个业余爱好者,对我来说很有意义。但我有个小问题。我的指令是查找
formControlName
属性
this.hostElement.nativeElement.nextElementSibling.attributes.formControlName
现在这样的元素不存在了,因为我使用的
[control]
在DOM上没有显示。知道我怎么才能得到controlName吗?
<ng-select #mySelect  [ngClass]="parentClass" 
  ...>
@Input()control:any
    <mycontrol [control]="someForm.get('someControl')"></mycontrol>