我们正在开发一个 SPA。在某些情况下,它的一部分被渲染到另一个应用程序中(作为标记的一部分)。在这种情况下,我们不希望在我们的应用程序中使用路由,因为我们可能会从其他应用程序“窃取”它。是否有可能在 Angular 中“关闭”路由?还是忽略未知路线?
我试过了
- router.resetConfig 配置为空>“无法匹配任何路由”-出现错误。
- 在单独的通配符路由上使用 CanActivate 防护,它总是返回 false -> 相同的问题
- 在单独的通配符路由上使用 CanLoad-Guard -> 当不使用 #-routing 时,这似乎有效。但是我们正在使用#-routing,并且由于 AOT,我还没有找到在运行时切换 useHash-Value 的方法。
正在工作的是,完全删除 RouteModule.forRoot(...)-Import - 但当然在这种情况下,应用程序的其余部分完全被破坏了。
这是 CanLoad-Guard 的一次尝试:
const routes: Routes = [
// ...
{ path: "", redirectTo: "home", pathMatch: "full" },
{ path: "**", redirectTo: "home" }
];
@NgModule({
declarations: [],
imports: [RouterModule.forRoot(routes, { useHash: true, initialNavigation: false })],
exports: [RouterModule],
providers: [{
provide: "DisableRouting",
useValue: () => false
}]
})
export class AppRoutingModule {
constructor(@Inject("HEADER_RENDER_MODE") private headerRenderMode: boolean, private router: Router) {
if (!headerRenderMode) {
router.initialNavigation();
} else {
// we don't want routing at this point
router.resetConfig([{
path: "**",
component: HomeComponent,
canLoad: ["DisableRouting"]
}]);
}
}
}