为什么Angular 2路由器在手动更改后更新模板而不更新URL

时间:2016-12-29 14:43:02

标签: angular angular2-routing

我有几条这样的路线......

[
    {
        path: "admin",
        component: ContentComponent,
        canActivate: [ CanActivateIfAuthenticated ],
        children: [
            {
                path: "",
                pathMatch: "full",
                redirectTo: "tenants",
            },
            {
                path: "tenants"
                component: TenantComponent
            }
         ]
    }
]
[
    {
        path: "other",
        component: ContentComponent,
        canActivate: [ CanActivateIfAuthenticated ],
        children: [
            {
                path: "",
                pathMatch: "full",
                redirectTo: "item",
            },
            {
                path: "item"
                component: ItemComponent
            }
         ]
    }
]

当我在/admin/tenants并且我手动更改网址时,routerOutlet会更改但网址仍为/admin/tenants。但是,当我将其更改回/admin时,会转到admin/tenants屏幕,但网址会显示/other/item。 Router.navigateByUrl似乎没有相同的问题。我正在使用HashLocationStrategy并且我有一个基本标记集,所以我认为不是那个问题。

以下是更新:

我已将其跟踪到路由器中的此代码...

if (navigationIsSuccessful) { _this.routerEvents.next(new NavigationEnd(id, _this.serializeUrl(url), _this.serializeUrl(_this.currentUrlTree))); resolvePromise(true); } else { _this.resetUrlToCurrentUrlTree(); _this.routerEvents.next(new NavigationCancel(id, _this.serializeUrl(url), '')); resolvePromise(false); }

navigationIsSuccessful正在解析为false,因此它正在调用重置Url函数。然后另一个(正确的)通过,但网址已经被重置。如果我查看来自callstack的错误请求的来源,那么问题仍然存在,因为调用堆栈表明此行导致了runNavigate ......

notifications = new Subject(); ... this.notifications.next({ isAuthenticated : exp, message: message, });

这似乎不应该导致导航。

1 个答案:

答案 0 :(得分:1)

我必须从路由器v 3.3.0升级到v 3.4.1