2

我们正在开发一个 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"]
                }]);
        }
    }
}
4

1 回答 1

2

我找到了一种方法......它并没有真正关闭,更像是忽略它。在“turnOff-Mode”中,我们只定义了一个通配符路由到一个组件,它什么都不做,什么也不渲染。

路由模块:

export class AppRoutingModule {
    constructor(@Inject("HEADER_RENDER_MODE") private headerRenderMode: boolean, private router: Router) {
        if (!headerRenderMode) {
            router.initialNavigation();
        } else {
            router.resetConfig([
                { path: "**", component: LazyComponent }
            ]);
        }
    }
}

惰性组件:

@Component({
    selector: "lazy",
    template: ""
})
export class LazyComponent {
}
于 2017-12-28T15:45:25.843 回答