无法读取未定义的 属性 'ngMetadataName'

Cannot read property 'ngMetadataName' of undefined

我正在使用 Angular 6 和 Angular Material。更新到最新版本后,控制台在开发中抛出此错误。 生产环境正常

Cannot read property 'ngMetadataName' of undefined

当我试图通过服务打开 material 对话框时发生(没有服务他们工作正常)。我认为这与注射剂有关,但我不确定。

版本:cli:6.1.5,核心:6.1.4,material:6.4.6

这是日志堆栈:

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)

如有任何帮助,我们将不胜感激。

服务内部的对话框,其中抛出错误:

 @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,
  }
});

尝试将@angular/core 降级到 6.0.0

这里有一个Sample StackBlitz Project可以帮你搞定不同包的版本。由于出现这些错误,版本不匹配存在很多问题。

这里有一些其他的配置要记住,它们可以很好地相互配合:

    "@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"

相同的消息,但与 Material 无关,我也遇到了这个错误。我意识到,有一个关于循环依赖的警告。删除依赖项后此错误消失。

编译过程中的其他警告消息可能有助于解决此问题。

要查看在您的 angular 项目中创建的循环依赖项,请通过将 false 的值从 false 更改为 true 来启用 angular.json 中的 showCircularDependencies

我在 Angular 7 项目中遇到了同样的问题。

constructor(private worksheetHandler: WorksheetPayloadHandler,
    private worksheetRepository: WorksheetRepository) { }

正如 user3102108 提到的,问题是因为检测到循环依赖。要确认,您可以 运行 ng build 并检查终端中的警告。我收到如下警告。

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

去除循环依赖后,问题解决。

我在使用 CLI 版本 8.0.4 升级 Angular 时遇到了这个错误。 我不得不降级到 @angular-devkit/build-angular 0.800.3 和 Angular CLI 到版本 8.0.3.

npm i --save-dev @angular-devkit/build-angular@0.800.3 @angular/cli@8.0.3

由于 1 个文件中有 2 个服务,我遇到了这个错误。将它们移动到单独的文件解决了这个问题。

上次我 ng serve 时,一条消息提示说

Browserslist: caniuse-lite is outdated. Please run next command `yarn upgrade`

听取了建议,但随后出现错误提示,说我需要先命令 yarn install

之后,关于混合锁文件的警告。

我最终只是 npm 更新和安装并忽略了初始警告消息。

另外一个推荐的选项,如果你还愿意使用最新的angular,
是与ng serve --aot.

一起使用

您的代码中可能存在循环依赖。

解决了,这个错误就过去了

检查一些东西..

1>检查所有用户定义的服务是否已在 app.module.ts providers[]

下注册

2>所有 Angular 模块(eg.AppRoutingModule,FormsModule,HttpClientModule)都应该在 imports[]

下注册

它解决了我的问题。