gpt4 book ai didi

使用全局注入(inject)器的 Angular 7 组件继承

转载 作者:太空狗 更新时间:2023-10-29 17:49:16 25 4
gpt4 key购买 nike

我一直在使用 MSDN blog post 中描述的方法简化扩展组件,而无需在 super() 调用中提供所有依赖项。然而,这在 Angular 7 和 Typescript 3 中已经停止工作。

所以发生的事情是,在引导之后,我尝试将注入(inject)器存储在服务中,然后我尝试检索它。

platformBrowserDynamic().bootstrapModule(AppModule).then(ref => {
// Store module's injector in the AppInjector class
console.log('Expected #1: storing app injector');
AppInjector.setInjector(ref.injector);
})

然后在基础组件中获取存储的注入(inject)器

export class BaseComponent {
constructor() {
console.log('Expected #2: retrieving stored injector');
const injector = AppInjector.getInjector();
}
}

但是查看控制台,顺序是相反的——首先调用 BaseComponent 的构造函数,然后调用 boostrapModule() 的 promise。

我不确定现在在 Angular 7 中引导​​行为是否有所不同,正如控制台日志所暗示的那样。使用 Typescript 2 在 Angular 6 中使用的解决方案非常相同,但在版本 7 中它已停止工作。这是基于 MSDN 文章的损坏的应用程序堆栈 Blitz :https://stackblitz.com/edit/component-inheritance-angular-7

所以根本问题是——如何保证 AppInjector.setInjector() 发生在 AppInjector.getInjector() 之前?

最佳答案

我已经在 AppModule 中设置了注入(inject)器服务,这意味着我将注入(inject) Injector 并将其设置在 AppModule 的构造函数中,并将注入(inject)器服务存储在全局对象中

export class AppModule { 
constructor(injector:Injector){
// Store module's injector in the AppInjector class
console.log('Expected #1: storing app injector');
AppInjector.setInjector(injector);
}
}

demo

关于使用全局注入(inject)器的 Angular 7 组件继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53185211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com