我正在使用APP_INITIALIZER
来检查用户是否已登录的Angular(当前为v7)应用程序上工作。代码非常简单,我添加了APP_INITIALIZER
@NgModule({
...,
providers: [
...,
{
provide: APP_INITIALIZER,
useFactory: CheckLoginFactory,
deps: [Initialization, AuthService, ObservableState],
multi: true
}
]
使用此工厂:
export function CheckLoginFactory(
init: any,
auth: AuthService,
oss: ObservableState
) {
const confirmLogin = auth
.confirmLogin()
.pipe(catchError(val => of(undefined)));
return () => confirmLogin.toPromise();
}
和confirmLogin
功能检查用户是否已登录
confirmLogin(): Observable<User> {
return this.get('authentication/login').pipe(
map(response => plainToClass(User, response as Object))
);
}
到目前为止非常简单,该代码在过去的一年中一直有效。现在,我重新构建了应用程序,并为应用程序的所有子页面实现了延迟加载,现在此代码不再起作用。从confirmLogin
发送的http请求在开发工具中始终显示为canceled
,并且工厂运行到.pipe(catchError(val => of(undefined)));
。
关于Angular在使用/不使用延迟加载的应用程序中处理APP_INITIALIZER
的方式是否有所不同?
您是否在懒加载模块?如果是这样,则必须确保在每个模块中都提供初始化程序。这个问题很好地回答了这个问题。