无法读取未定义的 属性 '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[]
下注册
它解决了我的问题。
我正在使用 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[]
下注册它解决了我的问题。