首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Angular混合: TypeError:无法读取未定义的get属性

Angular混合: TypeError:无法读取未定义的get属性
EN

Stack Overflow用户
提问于 2021-01-11 23:11:33
回答 1查看 262关注 0票数 0

我有一个NgUpgrade应用,我正在从Angular.js的UI-Router迁移到Angular的Router,一切都很顺利,直到我引入了一个延迟加载的模块。然后,在延迟加载模块的一个组件中,我得到了以下代码:

代码语言:javascript
运行
复制
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服务的引用:

代码语言:javascript
运行
复制
@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实例。这可能是什么原因呢?

EN

回答 1

Stack Overflow用户

发布于 2021-01-11 23:11:33

问题最终是,延迟加载的模块正在导入一个正在导入UpgradeModule的模块,从而创建了第二个实例。

要修复它,请确保只在应用程序的主模块中导入UpgradeModule。即使您的其他模块需要访问UpgradeModule,也只需要导入一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65669424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档