J'utilise Angular 6 avec Angular Matériau. Après la mise à jour vers la dernière version, la console lève cette erreur en développement. En production, cela fonctionne
Cannot read property 'ngMetadataName' of undefined
Cela se produit lorsque j'essaie d'ouvrir une boîte de dialogue de matériel via un service (sans service, ils fonctionnent bien). Je pense que cela est lié aux Injectables, mais je ne suis pas sûr.
Versions: cli: 6.1.5, noyau: 6.1.4, matériau: 6.4.6
Voici la pile de journaux:
CustomDialogComponent_Host.ngfactory.js? [sm]:1 ERROR TypeError: Cannot read property 'ngMetadataName' of undefined
at injectArgs (core.js:1418)
at core.js:1491
at _callFactory (core.js:8438)
at _createProviderInstance (core.js:8396)
at resolveNgModuleDep (core.js:8371)
at NgModuleRef_.Push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (core.js:9064)
at PortalInjector.Push../node_modules/@angular/cdk/esm5/portal.es5.js.PortalInjector.get (portal.es5.js:732)
at resolveDep (core.js:9419)
at createClass (core.js:9309)
at createDirectiveInstance (core.js:9186)
Toute aide sera appréciée.
dialogue à l'intérieur du service, où l'erreur est renvoyée:
@Injectable({
providedIn: 'root'
})
export class customService {
constructor(private store: Store<RootState>, private dialog: MatDialog) {}
const dialogRef = this.dialog.open(customDialogComponent, {
width: '300px',
data: {
loading: false,
customId,
}
});
Même message mais pas de relation avec Material, j'ai aussi eu cette erreur. J'ai réalisé qu'il y avait un avertissement concernant la dépendance circulaire. Cette erreur disparaît après que j'ai supprimé les dépendances.
Peut-être que d'autres messages d'avertissement pendant le processus de compilation aideront à résoudre ce problème.
J'ai rencontré cette erreur lors de la mise à niveau Angular avec la version 8.0.4 de la CLI. J'ai dû rétrograder à @angular-devkit/build-angular 0.800.3
et Angular CLI vers la version 8.0.3
.
npm i --save-dev @angular-devkit/[email protected] @angular/[email protected]
Essayez de déclasser @ angular/core à 6.0.0
Voici un exemple de projet StackBlitz pour vous aider avec les versions de différents packages. Il existe de nombreux problèmes d'incompatibilité de version en raison desquels ces erreurs se produisent.
Voici quelques autres configurations à garder à l’esprit qui fonctionnent bien les unes avec les autres:
"@angular/animations": "6.0.5",
"@angular/common": "6.0.0",
"@angular/compiler": "6.0.0",
"@angular/core": "6.0.0",
"@angular/cdk": "6.4.6",
"@angular/material": "6.4.6"
J'ai eu cette erreur en raison de 2 services dans 1 fichier. Les déplacer vers des fichiers séparés a résolu le problème.
Je faisais face au même problème dans mon projet Angular 7.
constructor(private worksheetHandler: WorksheetPayloadHandler,
private worksheetRepository: WorksheetRepository) { }
Comme l'utilisateur3102108 l'a mentionné, le problème était dû au fait qu'une dépendance circulaire avait été détectée. Pour confirmer, vous pouvez exécuter ng build
et vérifiez les avertissements dans le terminal. Je recevais l'avertissement comme ci-dessous.
WARNING in Circular dependency detected:
src\modules\service\services\worksheets\worksheet.events.service.ts -> src\modules\service\services\worksheets\worksheet.repository.ts -> src\modules\service\services\worksheets\worksheet.events.service.ts
WARNING in Circular dependency detected:
src\modules\service\services\worksheets\worksheet.repository.ts -> src\modules\service\services\worksheets\worksheet.events.service.ts -> src\modules\service\services\worksheets\worksheet.repository.ts
Après avoir supprimé la dépendance circulaire, le problème a été résolu.