我有一个NgUpgrade应用,我正在从Angular.js的UI-Router迁移到Angular的Router,一切都很顺利,直到我引入了一个延迟加载的模块。然后,在延迟加载模块的一个组件中,我得到了以下代码:
Found an error while navigating to /my-lazy-feature error: TypeError: Cannot read property 'get' of undefined
at new MyComponent (my.component.ts:86)
at NodeInjectorFactory.MyComponent_Factory [as factory] (my.component.ts:147)
at getNodeInjectable (core.js:3503)
at instantiateAllDirectives (core.js:9988)
at createDirectivesInstances (core.js:9337)
at Module.ɵɵelementStart (core.js:14559)
at MyOtherComponent_Template (my-other.component.ts:21)
at executeTemplate (core.js:9310)
at renderView (core.js:9117)
at renderComponent (core.js:10392)
at renderChildComponents (core.js:8982)
at renderView (core.js:9142)
at ComponentFactory$1.create (core.js:24837)
at ViewContainerRef.createComponent (core.js:22876)
at RouterOutlet.activateWith (router.js:5182)
此错误是在表达式upgrade.$injector.get
中生成的,在该表达式中,我试图获取对某个Angular.js服务的引用:
@Component(...)
export class MyComponent implements OnInit {
constructor(upgrade: UpgradeModule) {
this.state = upgrade.$injector.get("$state");
this.stateParams = upgrade.$injector.get("$stateParams");
}
在MyComponent
内部,我执行console.log(upgrade)
,但我看到没有upgrade.$injector
,但如果我从非延迟加载的模块执行同样的操作,我会看到$injector
是正确定义的。
因此,似乎有两个UpgradeModule
实例。这可能是什么原因呢?
发布于 2021-01-11 23:11:33
问题最终是,延迟加载的模块正在导入一个正在导入UpgradeModule
的模块,从而创建了第二个实例。
要修复它,请确保只在应用程序的主模块中导入UpgradeModule
。即使您的其他模块需要访问UpgradeModule
,也只需要导入一次。
https://stackoverflow.com/questions/65669424
复制相似问题