gpt4 book ai didi

Angular 8 APP_INITIALIZER 服务在加载配置文件之前启动

转载 作者:行者123 更新时间:2023-12-03 20:53:05 26 4
gpt4 key购买 nike

我在使用 Angular APP_INITIALIZER 加载配置文件时遇到问题。

它似乎服务开始加载 APP_INTIALIZER,因此配置文件无法到达服务,
并且在配置文件需要在服务启动之前进行设置之前导致错误。

这是 AppModule

export function load(http: HttpClient, config: AppConfigurationService):
(() => Promise<boolean>) {
return (): Promise<boolean> => {
return new Promise<boolean>((resolve, reject): void => {
http.get('/assets/config/config.json').
pipe(
map((res: AppConfigurationService) => {
config.defaultLanguage = res.defaultLanguage;
config.languages = res.languages;
config.title = res.title;
config.logo = res.logo;
resolve(true);
}), catchError((error: { status: number }, caught: Observable<void>): ObservableInput<{}> => {
reject('could not download webpages duo to the application maintenance');
return of(error);
})
).subscribe();
}).then(res => {
if (res) {
return new Promise<boolean>((resolve, reject): void => {
if (config) {
console.log(config, ' config is being produced?');
resolve(true);
} else {
reject('Not Found')
}
});
}
});
};}
@NgModule({
declarations: [
AppComponent,
RootComponent,
],
imports: [
BrowserModule.withServerTransition({ appId: 'serverApp' }),
TransferHttpCacheModule,
AppRoutingModule,
SharedModule,
],
providers: [
{
provide: APP_INITIALIZER,
useFactory: load,
multi: true,
deps: [
HttpClient,
AppConfigurationService
]
}
],
bootstrap: [AppComponent],
entryComponents: [
DialogServiceComponent
],}) export class AppModule { }

这是出错的地方

在 AppRoutingModule 中,我使用 CanActive 检查是否允许用户在某些条件下通过
    {
path: 'home',
component: homeComponent,
canActivate: [CheckUserService]
},

CheckUserService 将检查登录页面的用户的某些条件,如果不匹配,将出现 MatDialog
if (isLoggedIn) {
if(!userCondition){
this.openDialog();
return true;
}
return true;
}
} else {
return true;
}

openDialog() {
const dialogRef =
this.dialog.open(DialogServiceComponent, {
width: '1000px',
panelClass: 'my-dialog',
disableClose: true
});

dialogRef.afterClosed().subscribe(result => {
console.log(`Dialog result: ${result}`);
});
}

在 DialogServiceComponent 中,它会在 AppConfig 上获取一个配置文件,然后才能向 API 发送,但由于 app_initializer 尚未完成,因此出现错误是因为配置文件尚未完成处理。

我该如何解决这个问题,我不确定这是否是编写 APP_INITIALIZER 的正确方法

最佳答案

我通过从 AppRoutingModule 中删除 initialNavigation 来解决这个问题

如果您升级 angular 版本 7 -> 8,则会自动添加该行。

您可以在此处阅读更多问题 https://github.com/angular/universal/issues/1623

@NgModule({
imports: [RouterModule.forRoot(routes, {
scrollPositionRestoration: 'enabled',
anchorScrolling: 'enabled',
// initialNavigation: 'enabled'
})],
exports: [RouterModule]
})
export class AppRoutingModule { }

关于Angular 8 APP_INITIALIZER 服务在加载配置文件之前启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62035347/

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