22

我正在使用 Angular 6 和 Angular 材质。更新到最新版本后,控制台在开发中抛出此错误。在生产上它正在工作

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

8 回答 8

37

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

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

要在您的 Angular 项目中查看创建的循环依赖项,请通过将其值从 更改为来启用showCircularDependenciesangular.jsonfalsetrue

于 2018-09-17T13:58:16.617 回答
19

我在使用 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
于 2019-06-25T13:46:50.733 回答
2

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

于 2019-09-05T12:42:34.973 回答
1

尝试将@angular/core 降级到 6.0.0

这是一个示例 StackBlitz 项目,可帮助您了解不同软件包的版本。由于发生这些错误,版本不匹配存在很多问题。

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

    "@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"
于 2018-08-27T12:29:39.110 回答
0

检查几件事..

1>检查所有用户定义的服务都在app.module.ts providers[]下注册

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

它解决了我的问题。

于 2020-06-13T14:06:01.623 回答
0

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

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

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

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

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

如果您仍然愿意使用最新的角度,另一个推荐的选项
是使用 withng serve --aot.

于 2019-11-01T00:30:35.347 回答
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

去掉循环依赖后,问题就解决了。

于 2019-04-29T09:38:58.287 回答
0

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

解决它,这个错误就会消失。

于 2019-11-22T09:50:56.110 回答