Angular 在实施延迟加载后取消从 APP_INITIALIZER 发送的 HttpRequest
Angular cancels HttpRequest send from APP_INITIALIZER after implementing Lazy Loading
我正在开发一个 Angular(当前为 v7)应用程序,该应用程序使用 APP_INITIALIZER
检查用户是否已登录。代码非常简单,我添加了 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
有什么不同吗?
你在延迟加载模块吗?如果是这样,您必须确保在每个模块中提供初始化程序。这个问题很好地回答了这个问题。
Angular Does APP_INITIALIZER work inside of lazy loaded modules
我通过清理代码设法解决了这个问题。我仍然不清楚,是什么修复了它。显然,一些额外的依赖项破坏了代码……所以我所做的就是将提供程序部分中的 APP_INITIALIZER
部分清理为只有一个依赖项:
{
provide: APP_INITIALIZER,
useFactory: CheckLoginFactory,
deps: [AuthService],
multi: true
}
Angular 显然自动知道 AuthService
有哪些子依赖项,因此不需要在这里再次明确指定它们。
我正在开发一个 Angular(当前为 v7)应用程序,该应用程序使用 APP_INITIALIZER
检查用户是否已登录。代码非常简单,我添加了 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
有什么不同吗?
你在延迟加载模块吗?如果是这样,您必须确保在每个模块中提供初始化程序。这个问题很好地回答了这个问题。
Angular Does APP_INITIALIZER work inside of lazy loaded modules
我通过清理代码设法解决了这个问题。我仍然不清楚,是什么修复了它。显然,一些额外的依赖项破坏了代码……所以我所做的就是将提供程序部分中的 APP_INITIALIZER
部分清理为只有一个依赖项:
{
provide: APP_INITIALIZER,
useFactory: CheckLoginFactory,
deps: [AuthService],
multi: true
}
Angular 显然自动知道 AuthService
有哪些子依赖项,因此不需要在这里再次明确指定它们。