我有几条这样的路线......
[
{
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,
});
这似乎不应该导致导航。
答案 0 :(得分:1)
我必须从路由器v 3.3.0升级到v 3.4.1