gpt4 book ai didi

javascript - Angular 4不同的 token 相同的实现

转载 作者:行者123 更新时间:2023-11-30 21:00:06 25 4
gpt4 key购买 nike

我有一个 angular 4 应用程序,它被分解成不同的功能。所以我有一个购物功能及其所有组件和计费功能及其所有组件。

但是,我在配置方面遇到了问题。我想在应用程序的多个功能之间共享配置。每个功能的配置都不同,因此我创建了一个基本配置类并从中继承。

但是在我的 app.module 中进行了如下注册。

{ provide: BillingModuleConfig, useClass: ConfigService },
{ provide: ShoppingConfig, useClass: ConfigService }
{
provide: APP_INITIALIZER,
useFactory: configServiceFactory,
deps: [ShoppingConfig],
multi: true
}

但是,这不适用于 BillingModuleConfig。这意味着当我在我需要它的部分中注入(inject) BIllingConfig 时,我无法获得配置设置。这行不通有什么原因吗?我的 ConfigServiceFactory 是加载配置文件的外部函数,如下所示。

export function configServiceFactory(config: ConfigService) {
return () => config.load();
}

config.load 方法将所有配置加载到一个继承自 ShoppingConfig 和 BillingConfig 的类中。

config.load的实现是

import { Injectable, OnInit } from '@angular/core';
import { Http } from '@angular/http';
import { BillingModuleConfig} from '@razor/Billing';
import { ShoppingConfig } from '@razor/shopping';
import { environment } from './../../environments/environment';
import { HttpClient } from '@angular/common/http';

abstract class Settings implements BillingModuleConfig, ShoppingConfig {
public ShoppingAPIUrl: string;
public BillingApiUrl: string;

}

@Injectable()
export class ConfigService implements Settings {

constructor(private http: HttpClient) {}

public load() {
return new Promise((resolve, reject) => {
this.http
.get<Settings>(environment.configFileName)
.subscribe((config: AppSettings) => {
this.ShoppingAPIUrl= config.ShoppingAPIUrl;
this.BillingApiUrl= config.BillingApiUrl;
resolve(true);
});
});
}
}

最佳答案

考虑到 config.load将获取的配置分配给 ConfigService类实例,它将仅适用于指定为 APP_INITIALIZER 依赖项的提供者 token ,即 ShoppingConfig .

为了在 BillingModuleConfig 中获取配置, 也应该指定:

{
provide: APP_INITIALIZER,
useFactory: configServiceFactory,
deps: [ShoppingConfig],
multi: true
},
{
provide: APP_INITIALIZER,
useFactory: configServiceFactory,
deps: [BillingModuleConfig],
multi: true
}

但是,这将导致两个请求。为避免这种情况,最简单的方法是使用 ConfigService到处。如果BillingModuleConfigShoppingConfig被引入是因为配置当前是合并的,但应该在以后分开,他们可以重用一个公共(public)实例:

ConfigService,
{ provide: BillingModuleConfig, useExisting: ConfigService },
{ provide: ShoppingConfig, useExisting: ConfigService },
{
provide: APP_INITIALIZER,
useFactory: configServiceFactory,
deps: [ConfigService],
multi: true
}

关于javascript - Angular 4不同的 token 相同的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47219028/

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