6

角度版本:4

LoginComponent( 位于public/signinroute 登录后,我想导航到TestComponentpath public/test。我这样做如下:this._router.navigate(['public/test']) 然后,它正确重定向但问题是它没有LoginComponent从 DOM 中删除(尽管ngOnDestroy确实被调用)。

值得一提的是,导航到TestComonent使用 <a routerLink='/public/test'>Test</a>按预期工作。

我究竟做错了什么?

app.routing.ts:

const APP_ROUTES:Routes = [
  {path: 'public', loadChildren: './authentication/authentication.module#AuthenticationModule'}
];

export const APP_ROUTING:ModuleWithProviders = RouterModule.forRoot(
APP_ROUTES, {
useHash: false, enableTracing: true, initialNavigation: true});

` authentication.routing.ts(这两个组件都属于):

const routes: Routes = [
    {
        path: '',
        children: [
            {path: 'test', component: TestComponent},
            {path: 'signin', component: LoginComponent},
        ]
    }
];

export const routing = RouterModule.forChild(routes);
4

3 回答 3

4

我有同样的问题。我通过在路由之前添加这个来修复:

this.zone.run(() => {
    // Your router is here
    this._router.navigate(['public/test'])
});
于 2018-01-03T10:12:09.673 回答
0

您是否尝试过在开头添加斜杠以使其与您的路由器链接完全匹配?

this._router.navigate(['/public/test'])

以下是有关路线中相对路径与绝对路径的更多信息:https ://angular.io/guide/router#relative-navigation

于 2017-08-09T19:42:59.243 回答
0

我和你有同样的问题,找到了一个(临时)解决方法。首先,我认为这是模块上延迟加载的路由问题,我改为处理组件,但问题从未消失。

最后,我在我的组件中实现了 OnDestroy(来自核心)。当调用 ngOnDestroy 函数时,我编写了一个从 DOM 中删除剩余元素的小 JavaScript。

var parent = document.getElementsByTagName("parent-name");
var child = document.getElementsByTagName("ng-component");
parent[0].removeChild(child[0]);

我知道这只是一个临时工作,但在你从某人那里得到最终答案之前可能已经足够好了。

希望

于 2017-08-09T16:20:47.997 回答