Angular mat错误不存在';不显示内垫形式字段

Angular mat错误不存在';不显示内垫形式字段,angular,angular-material,Angular,Angular Material,我在子组件中有mat select代码,我传递输入以显示和隐藏错误。下面是我的代码 <mat-form-field> <mat-select [formControl]="ctrl" [placeholder]="placeholder"> <mat-option *ngFor="let option of options" [value]="option">

我在子组件中有mat select代码,我传递输入以显示和隐藏错误。下面是我的代码

  <mat-form-field>
    <mat-select [formControl]="ctrl" [placeholder]="placeholder">
      <mat-option *ngFor="let option of options" [value]="option">
        {{ option }}
      </mat-option>
    </mat-select>
    <mat-error *ngIf="onError">Error: Required Field</mat-error>
  </mat-form-field>

{{option}}
错误:必填字段
OneError是决定隐藏或显示mat错误的输入属性

下面是我如何调用mat select的

<my-select onError="true" [ctrl]="form.get('cities')" [options]="cities" placeholder="Cities"></my-select>

堆栈闪电战:


只需添加空选择,因为如果值为空,则会出现错误。

除Aviby 2006s empty外,您还可以在模板中添加空选项,这样您的选项数组就可以保留空选项:


{{option}}
两件事:

1.-您忘记告诉您的组件select是一个
[formControl]

<mat-select [formControl]="ctrl" [placeholder]="placeholder">
    ...
</mat-select>

...

2.-当您作为
[ctrl]
传递自己的formControl时,您不需要实现ControlValueAccessor(仅当您创建自定义表单控件时使用它-一个可以在ReactiveForm内部使用或与[(ngModel)]一起使用的“特殊组件”)作为一个普通的
-。我想说的是删除函数:writeValue,registerChange,

如果将mat错误放在mat表单字段之外,而不是放在它里面,它就会工作。您不需要空字符串,只需单击任何选项。它会工作,但此验证是针对无效输入的选择,对吗?我会触发mArkaStuched方法,但如果它在mat中选择它们不起作用
cities:['',Validators.required],
将在有空时抛出错误,因为我的链接已更新。问题是ng值访问不需要空选项或空字符串来使其起作用。只需单击选择框,不选择任何选项。
<mat-select [formControl]="ctrl" [placeholder]="placeholder">
    ...
</mat-select>