如何解决Angular Hybrid:TypeError:无法读取未定义的属性“get”
我有一个 NgUpgrade 应用程序,我正在从 Angular.js 的 UI-Router 迁移到 Angular 的路由器,一切都很顺利,直到我引入了一个延迟加载的模块。然后,在延迟加载模块的其中一个组件中,我得到了这个:
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
,但是如果我从非延迟加载的模块中执行相同的操作,我会看到 {{1} } 定义正常。
所以似乎有 2 个 $injector
实例。这可能是什么原因?
解决方法
问题最终是,延迟加载的模块正在导入一个正在导入 UpgradeModule
的模块,从而创建了第二个实例。
要修复它,请确保仅在应用程序的主模块中导入 UpgradeModule
。即使您的其他模块需要访问 UpgradeModule
,也只需导入一次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。