Encyclopédie des erreurs

Value accessor manquant

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.

  1. Si vous avez défini un contrôle de formulaire personnalisé, avez-vous pensé à fournir un value accessor ?
  2. Avez-vous placé ngModel sur un élément sans valeur, ou sur un élément invalide (par ex. <div [(ngModel)]="foo">) ?
  3. Utilisez-vous un contrôle de formulaire personnalisé déclaré dans un NgModule ? Si c'est le cas, assurez-vous d'importer le NgModule.
  4. Utilisez-vous ngModel avec un contrôle de formulaire personnalisé tiers ? Vérifiez si ce contrôle fournit un value accessor. Sinon, utilisez ngDefaultControl sur l'élément du contrôle.
  5. Ê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.
  6. Utilisez-vous Nx et Module Federation avec webpack ? Votre webpack.config.js peut nécessiter une configuration supplémentaire pour garantir que le package forms est partagé.