私のアプリケーションでは、テンプレート駆動の検証を使用していましたが、モデル駆動型のアプローチに切り替える必要がありますが、双方向のデータバインディングを削除したくありませんでした.だから私のhtmlコントロールはそのようなものでした.
form [formGroup]="myForm">
input type="checkbox" [(ngModel)]="selected.HasFull" formControlName="HasFull" /
しかし、それはこのエラーをスローし始めました
ngModel cannot be used to register form controls with a parent formGroup directive. Try using formGroup's partner directive "formControlName" instead. Example:
div [formGroup]="myGroup">
input formControlName="firstName"
/div
In your class:
this.myGroup = new FormGroup({
firstName: new FormControl()
});
Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:
Example:
div [formGroup]="myGroup">
input formControlName="firstName">
input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}"
</div
次に、この [ngModelOptions]="{standalone: true}" を html コントロールに追加しましたが、[ngModelOptions] は入力の既知のプロパティではありませんというエラーが表示されました。
[ ngModelOptions ] を ng-model-options に置き換えたときに入力の既知のプロパティではないという問題が解消されましたが、「ngModel を使用してフォーム コントロールを親の formGroup ディレクティブに登録することはできません」というエラーが引き続き表示されました。フォームに検証を必要としない 2 つのフィールドがあったため、それらには formControlName 属性がありませんでした。回避策として、これらの 2 つのフィールドを fromgroup の一部にして、それらに formControlName 属性を追加しました。現在は正常に機能しています。ただし、これら 2 つのフィールドの検証は必要ありませんでしたが、少なくともエラーは発生していません。