调用platformBrowserDynamic().bootstrapModule(@NgModule)会返回ASSERTION ERROR,因为传入的类型不是NgModuleType,它没有'ɵmod'属性。

10
我遇到了一个问题,涉及到"platformBrowserDynamic().bootstrapModule(app.app_module)" 的调用。错误信息是 "Uncaught Error: ASSERTION ERROR: Type passed in is not NgModuleType, it does not have 'ɵmod' property"。然而,在调试过程中我可以看到这个属性:AppModule NgModule proto emod property
app.app_module是一个新的@NgModule实例,用于引导我的自定义应用组件。我使用了TypeScript。有没有人能提供任何关于为什么会出现这种情况的想法?
此外,以下是源JS代码 https://gist.github.com/sunnygleason/74e84acd0a03a925ec901594723ce876, 我正在将其转换为TypeScript Angular CLI 项目,这是https://github.com/AnatoliYatskevich/WIA 我修改的具体文件是: https://github.com/AnatoliYatskevich/WIA/blob/master/src/main.ts https://github.com/AnatoliYatskevich/WIA/blob/master/src/index.htmlhttps://github.com/AnatoliYatskevich/WIA/blob/master/src/app/app.component.ts https://github.com/AnatoliYatskevich/WIA/blob/master/src/app/app.module.ts

使用WebStorm工具进行开发,格式可以参考此处:https://www.pubnub.com/docs/angular2-javascript/pubnub-javascript-sdk

谢谢!

1个回答

5
该错误是由错误的模块导入引起的(有时它被抛出为“无法读取未定义的属性‘ngModule’”,这也可以更深层次地设置为“传入的类型不是NgModuleType,它没有'ɵmod'属性”)。
以下步骤(稍微调整可适用于两种情况): 如何找到错误发生的确切位置? (特别是在我们团队的多个相互依赖模块的复杂项目中)
在浏览器开发工具中,在出现错误的行上放置一个调试断点(在本例中是core.js:26131)。那里的代码对我们帮助不大,因为它是错误记录函数(可能是defaultErrorLogger)。 但是,当断点触发时,我们可以在Dev Tools调用堆栈中向后查找,直到以下代码(或类似代码)发生了错误:
function isModuleWithProviders(value) {
    return value.ngModule !== undefined;
}

value未定义时,会出现错误,因此我们可以设置一个带有条件!value的断点,这将显著加快错误追踪过程(仅在导入模块出错时触发)。

当条件断点被触发时,我们可以再次回溯调用堆栈,直到get方法,在那里我们可以访问moduleType.name以查找导致错误的模块名称。

第二部分中,我们打开该名称的模块,使用分而治之的方法,通过注释模块导入,直到错误消失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接