关闭Angular 5路由

时间:2017-12-01 13:33:34

标签: angular angular-router angular-router-guards

我们正在开发SPA。在某些情况下,它的一部分被渲染到另一个应用程序中(作为标记的一部分)。 在这种情况下,我们不希望在我们的应用程序中进行路由,因为我们可能会“偷”"它来自其他应用程序。 是否有可能,以及#34;关闭"完全在Angular中路由?或者忽略未知的路线?

我试过

  • router.resetConfig,配置为空> "无法匹配任何路线" -Error出现。
  • 在单独的通配符路由上使用CanActivate防护,它始终返回false - >同样的问题
  • 在单独的通配符路由上使用CanLoad-Guard - >这似乎工作,当不使用#-routing时。但我们正在使用#-routing,因为AOT我还没有找到一种在运行时切换useHash-Value的方法。

什么是工作,完全删除RouteModule.forRoot(...) - 导入 - 当然,在这种情况下,应用程序的其余部分完全被破坏。

这是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"]
                }]);
        }
    }
}

1 个答案:

答案 0 :(得分: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 {
}