Pour tout contrôle de formulaire personnalisé, vous devez enregistrer un value accessor.
Voici un exemple montrant comment en fournir un :
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MyInputField),
multi: true,
},
];
Déboguer l'erreur
Comme décrit ci-dessus, votre contrôle devait avoir un value accessor, mais il n'en avait pas. Cependant, de nombreuses raisons différentes peuvent provoquer cette situation en pratique. Voici une liste de problèmes connus menant à cette erreur.
- Si vous avez défini un contrôle de formulaire personnalisé, avez-vous pensé à fournir un value accessor ?
- Avez-vous placé
ngModelsur un élément sans valeur, ou sur un élément invalide (par ex.<div [(ngModel)]="foo">) ? - Utilisez-vous un contrôle de formulaire personnalisé déclaré dans un
NgModule? Si c'est le cas, assurez-vous d'importer leNgModule. - Utilisez-vous
ngModelavec un contrôle de formulaire personnalisé tiers ? Vérifiez si ce contrôle fournit un value accessor. Sinon, utilisezngDefaultControlsur l'élément du contrôle. - Êtes-vous en train de tester un contrôle de formulaire personnalisé ? Veillez à configurer votre TestBed pour qu'il connaisse le contrôle. Vous pouvez le faire avec
Testbed.configureTestingModule. - Utilisez-vous Nx et Module Federation avec webpack ? Votre
webpack.config.jspeut nécessiter une configuration supplémentaire pour garantir que le package forms est partagé.