アプリで PrimeNG autoComplete コンポーネントを使用しています。有効で無効なものはすべて「赤」で表示します。デフォルトでは、コントロールを無効にする検証がない限り、Angular はすべての入力フィールドを ng-valid スタイル クラスでマークします。これはAngularでは標準のようです。PrimeNg コントロールが同じように動作していません。
場所のオートコンプリート ドロップダウンから値を選択し、番号の電話タイプと同じように削除してから削除すると、検証がトリガーされなくなりました
HTML
<div class="form-group col-xs-3 col-md-3"
[ngClass]="{
'has-error':(ersaForm.get('phone').touched || ersaForm.get('phone').dirty ) &&
!ersaForm.get('phone').valid
}">
<label for="phoneId" class="control-label">Phone</label><br />
<p-inputMask mask="(999) 999-9999" formControlName="phone" (onBlur)="checkValidity();" unmask="true" styleClass="form-control" [style]="{'width': '100%','height':'34px'}" id="phoneId" placeholder="Phone (required)"></p-inputMask>
</div>
<div class="form-group col-xs-3 col-md-3"
[ngClass]="{
'has-error':(ersaForm.get('location').touched || ersaForm.get('location').dirty ) &&
!ersaForm.get('location').valid
}">
<label for="locationId" class="control-label">Location</label>
<p-autoComplete formControlName="location" id="locationId" (onBlur)="checkValidity()" [suggestions]="iOffice" forceSelection="true" placeholder="Office (required)" inputStyleClass="form-control" (completeMethod)="searchOffice($event)" [style]="{'width': '100%','display': 'inline-flex','height':'34px'}" field="ORG_BRH_ADDR_LN" dataKey="ORG_BRH_NO" [dropdown]="true"></p-autoComplete>
</div>
TSコード
this.ersaForm = this._fb.group({
phone: new FormControl('', Validators.required),
location: ['', Validators.required],
});
checkValidity(): void {
Object.keys(this.ersaForm.controls).forEach((key) => {
console.log('inside validation');
this.ersaForm.controls[key].markAsDirty;
// this.ersaForm.controls[key].
});
}