首页 文章

Angular 4 routing - redirectTo with skipLocationChange

提问于
浏览
4

我有一些路由模块,其主路径设置为: /canvas

const canvasRoutes: Routes = [
    {
        path: "canvas", component: CanvasComponent
    }
];

@NgModule({
    imports: [
        RouterModule.forChild(canvasRoutes)
    ],
    exports: [
        RouterModule
    ],
    declarations: [],
    providers: []
})
export class CanvasRoutingModule {
}

在应用程序路由模块中,我希望每次访问根路径时都将重定向路径设置为 /canvas . 目前配置如下:

const appRoutes: Routes = [
    {
        path: "", redirectTo: "/canvas", pathMatch: "full"
    }
];

@NgModule({
    imports: [
        RouterModule.forRoot(appRoutes)
    ],
    exports: [
        RouterModule
    ],
    declarations: [],
    providers: []
})
export class AppRoutingModule {

}

它正常工作,并且 http://localhost:4201 的访问被重定向到 http://localhost:4201/canvas .

但是,我不希望在重定向后将 /canvas 路径附加到URL . 怎么能实现这一目标?有没有例如一种方法,我可以将 skipLocationChange 参数应用于此重定向,因为我正在使用 router.navigate(... {skipLocationChange: true})

2 回答

  • 5

    有点晚了,但也许它有用:

    我有同样的问题,并设法通过在声明Router.forRoot时添加ExtraOptions来解决它

    像这样:

    imports: [ RouterModule.forRoot(routes, { initialNavigation : false }) ],
    

    通过这种方式,您可以避免将/ canvas设置为URL的初始导航 .

    之后,您可以继续使用skipLocationChange .

    希望这可以帮助!

  • 1

    我通过订阅 AppComponent 中的 router.events 并手动导航到 canvas 路径并将 skipLocationChange 设置为true来解决该问题 .

    @Component({
        ...
    })
    export class AppComponent {
        constructor(private router: Router) {
            this.router.events.subscribe(routerEvent => {
                if (routerEvent instanceof NavigationStart) {
                    if (routerEvent.url == "/") {
                        this.router.navigate(["canvas"], {skipLocationChange: true})
                    }
                }
            });
        }
    }
    

相关问题