无法读取未定义的属性“ ngMetadataName”

时间:2018-08-27 11:30:35

标签: angular angular6 angular-material-6

我正在将Angular 6与Angular Material一起使用。更新到最新版本后,控制台在开发中抛出此错误。 正在生产中

Cannot read property 'ngMetadataName' of undefined

当我尝试通过服务打开材质对话框时会发生(没有服务,他们运行正常)。我认为这与注射剂有关,但我不确定。

版本:cli:6.1.5,核心:6.1.4,材料: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,
  }
});

8 个答案:

答案 0 :(得分:15)

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

在编译过程中可能会有其他警告消息可以帮助解决此问题。

答案 1 :(得分:14)

当我使用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

答案 2 :(得分:1)

尝试将@ 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"

答案 3 :(得分:0)

我在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

删除循环依赖关系后,问题已解决。

答案 4 :(得分:0)

由于有1个文件包含2个服务,因此出现了此错误。将它们移动到单独的文件即可解决此问题。

答案 5 :(得分:0)

上次我ng serve结束时,出现提示信息

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

寻求建议,但是随后出现一条错误提示,提示我需要先命令yarn install

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

我结束了npm的更新和安装,并忽略了最初的警告消息。

答案 6 :(得分:0)

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

解决它,此错误会消失。

答案 7 :(得分:0)

检查几件事..

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

下注册

2>所有Angular模块(例如AppRoutingModule,FormsModule,HttpClientModule)都应在imports下注册[]

它解决了我的问题。