微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Angular Hybrid:TypeError:无法读取未定义的属性“get”

如何解决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 举报,一经查实,本站将立刻删除。