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

Asl*_*lam 17 angular-cli 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)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

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

 @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,
  }
});
Run Code Online (Sandbox Code Playgroud)

小智 27

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

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

  • 我建议抓取webpack的循环依赖插件,该插件向我们展示了一堆循环deps,这些插件在修复后会导致上述错误消失:https://www.npmjs.com/package/circular-dependency-plugin (2认同)

Mat*_*ler 16

使用CLI版本8.0.4升级Angular时遇到此错误。我必须降级到@angular-devkit/build-angular 0.800.3Angular CLI到version 8.0.3

npm i --save-dev @angular-devkit/build-angular@0.800.3 @angular/cli@8.0.3
Run Code Online (Sandbox Code Playgroud)

  • 在最新的8.1.0版中已修复 (3认同)
  • @GabrielG。没有测试它,但我认为当您使用@Inject(..)装饰器并同时定义参数的类型时会发生这种情况。 (2认同)