- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 APP_INITIALIZER Hook 从本地 json 文件加载一些应用配置。加载配置后,我想在另一个提供程序中使用它(为我生成的 swagger-codegen 服务设置 BASE_PATH)。
我收到此错误:Uncaught TypeError: Cannot read property 'api' of undefined
我尝试访问 AppInitService.settings.api
的值是 AppInitService 上的静态属性。我怀疑这是问题所在,但据我所知,APP_INITIALIZER Hook 应该保证在继续之前等待......
如何等待值加载到 APP_INITIALIZER 中并准备好在其他提供程序 useValue
中重用?
app.module.ts
export function initializeApp(appConfig: AppInitService) {
return (): Promise<any> => appConfig.init()
}
@NgModule({
declarations: [...],
imports: [...],
providers: [
AppInitService,
{
provide: APP_INITIALIZER,
useFactory: initializeApp,
deps: [AppInitService],
multi: true,
},
{
provide: BASE_PATH,
useValue: AppInitService.settings.api,
},
],
app.config.service.ts
@Injectable()
export class AppInitService {
static settings: IAppConfig
private conf: IAppConfig
constructor(private http: HttpClient) {}
public getConf() {
return this.conf
}
init() {
const jsonFile = `assets/config/config.json`
return this.http
.get(jsonFile)
.pipe(
tap((returnedConfig: IAppConfig) => {
console.log('returnedConfig', returnedConfig)
AppInitService.settings = returnedConfig
this.conf = returnedConfig
})
)
.toPromise()
}
}
最佳答案
您可以使用工厂供应商。
{
provide: BASE_PATH,
useFactory: (service: AppInitService) => service.conf, // doesn't need to be static
deps: [AppInitService]
}
Angular 只会在第一次解析提供者时调用工厂函数,但您只是假设它将在以后解析。它现在可能可以工作,但稍后可能会中断或根本无法工作。
相反,使用可观察值作为可注入(inject)值。
@Injectable()
public class AppInitService {
public conf: ReplaySubject<any> = new ReplaySubject(1);
init() {
const jsonFile = `assets/config/config.json`
return this.http
.get(jsonFile)
.pipe(
tap((returnedConfig: IAppConfig) => this.conf.next(returnedConfig))
).toPromise()
}
}
关于angular - 在其他提供商中使用 APP_INITIALIZER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56936118/
我有一个简单的配置服务,我在我的 app.shared.module.ts 中使用 APP_INITIALIZER token 连接: ConfigService, {
我正在尝试使用 auth0/auth0-angular Angular 11 应用程序中的库。 我正在关注 loading config dynamically 上的部分. 它提供了这个示例应用模块代
我有一个延迟加载的模块,我正在尝试添加 APP_INITIALIZER 但它没有触发。我的语法与我的主应用程序完全相同,它按预期工作。延迟加载的模块是否会触发 APP_INITIALIZER? 最佳答
我正在使用 APP_INITIALIZER Hook 从本地 json 文件加载一些应用配置。加载配置后,我想在另一个提供程序中使用它(为我生成的 swagger-codegen 服务设置 BASE_
我有一个 Angular (v6.0.0) 应用程序,我正试图通过在 APP_INITIALIZER 期间引入运行时配置来设置它。我已经阅读了几篇文章(例如 this 和 this 和 this )以
我正在使用 APP_INITIALIZER 加载环境特定变量。我需要在我的 authConfigFactory 中使用这些变量,但工厂会在 APP_INITIALIZER 完成应用程序配置之前继续加载
我正在使用这个 gist在应用程序启动期间读取配置文件。这工作正常,但在进行单元测试时出现错误 Cannot read property 'SomeProperty' of null。 我也添加了pr
我正在使用 this 中推荐的 APP_INITIALIZER回答,我的服务返回一个 promise ,但它并不总是等待它解决,我可以看到我的组件 console.logging 未定义,然后服务记录
我有一个 Angular 5.2.0 应用程序。我查找了如何实现 APP_INITIALIZER在应用程序启动之前加载配置信息。这里是 app.module 的摘录: providers: [
typescript :2.2.0 Angular :4.0 我试图通过使用 APP_INITIALIZER 确保在应用程序启动之前初始化 ConfigService 对象。我发现了很多关于如何执行此
在我的 Angular 6 应用程序中,我通过这样的 Http 服务加载我的外部化配置: export function getSettings(appLoadService: ConfigLoadS
问题是:我需要进行 http 调用并存储生成动态路由所需的对象。所以,我正在利用 APP_INITIALIZER。 // app.module.ts import { ApplicationServi
我在使用 Angular APP_INITIALIZER 加载配置文件时遇到问题。 它似乎服务开始加载 APP_INTIALIZER,因此配置文件无法到达服务, 并且在配置文件需要在服务启动之前进行设
如何在 Angular 应用程序执行 app_initializer 代码时显示等待指示器。 截至目前,我可以在加载应用程序之前显示等待指示器。但是在该页面保持空白直到 app_initializer
背景:我需要在应用程序启动期间执行几次初步检查(1)从./assets/config.json文件读取angular应用程序配置并从那里获取API端点,(2)进行API调用到端点在第一步中检索并从后端
类似于Angular 5 APP_INITIALIZER gives Cyclic dependency error 我有一个使用 Angular 5 和 SSR 的应用程序,我刚刚从 Angular
我有一个来自静态 AppConfigService 的配置文件的值。 说明如下: 引用代码/文章:https://blogs.msdn.microsoft.com/premier_developer/
我在使用 Angular 4 时遇到了一些引导问题。我有一个配置文件 (json),我在应用程序启动时从服务器加载它(另请参见 here )。这到目前为止有效。 现在我有一个 dependency这需
我正在寻找能让我在某个模块初始化时执行代码的东西。这个模块在我的应用程序中是延迟加载的。 APP_INITIALIZER 仅适用于应用程序初始化过程(一次从引导的主模块开始)。 我不能使用延迟加载模块
我正在尝试一个简单的 APP_INITIALIZER使用我的 angular 应用程序,但出现错误 this.appInits[i] is not a function - 无法弄清楚问题。 这是我的
我是一名优秀的程序员,十分优秀!