すべてのカスタムフォームコントロールには、値アクセサを登録する必要があります。
値アクセサを提供する方法の例を以下に示します。
providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MyInputField), multi: true, }]
エラーのデバッグ
上記のように、コントロールには値アクセサが必要ですが、見つかりませんでした。しかし、実際にはこのエラーが発生する原因はたくさんあります。このエラーにつながる可能性のある既知の問題を次に示します。
- カスタムフォームコントロールを定義した場合、値アクセサを提供することを忘れませんでしたか?
- 値のない要素、または無効な要素に
ngModel
を配置しましたか(例:<div [(ngModel)]="foo">
)? NgModule
内で宣言されたカスタムフォームコントロールを使用していますか? その場合は、インポートしていることを確認してください。- サードパーティのカスタムフォームコントロールで
ngModel
を使用していますか? そのコントロールが値アクセサを提供しているかどうかを確認してください。提供していない場合は、コントロールの要素に**ngDefaultControl
**を使用してください。 - カスタムフォームコントロールをテストしていますか? テストベッドがコントロールについて認識していることを確認してください。これは
Testbed.configureTestingModule
を使用して実行できます。 - NxおよびモジュールフェデレーションをWebpackで使用していますか?
webpack.config.js
には、フォームパッケージが共有されるようにするための追加の構成が必要になる場合があります。