要解决Angular Universal启用initialNavigation并且CanActivateChild返回false时不响应的问题,您可以使用以下解决方法:
在路由模块(通常是app-routing.module.ts)中,将initialNavigation设置为false。这将禁用初始导航并防止CanActivateChild中的返回false导致不响应。
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [
// 路由定义
];
@NgModule({
imports: [RouterModule.forRoot(routes, { initialNavigation: false })],
exports: [RouterModule]
})
export class AppRoutingModule { }
在CanActivateChild守卫中,如果返回false,则手动导航到一个默认路由,以确保应用程序继续导航到目标页面。
import { Injectable } from '@angular/core';
import { CanActivateChild, Router } from '@angular/router';
@Injectable()
export class MyGuard implements CanActivateChild {
constructor(private router: Router) {}
canActivateChild(): boolean {
// 在这里添加您自己的授权逻辑
if (!authorized) {
this.router.navigate(['/default-route']); // 导航到默认路由
return false;
}
return true;
}
}
请确保在CanActivateChild守卫中替换"authorized"变量为您自己的授权逻辑。
通过以上两种解决方法,您可以在Angular Universal启用initialNavigation并且CanActivateChild返回false时,仍然能够继续导航到目标页面。