Angular 角度2。如何防止路线改变

Angular 角度2。如何防止路线改变,angular,angular2-routing,Angular,Angular2 Routing,我在angular 2中有一个子组件,它处理特定级别之后的所有管线,该管线在父组件中定义为 @RouteConfig([ { path: '/*other', name: 'Detail', component: DetailsViewComponent, useAsDefault: true }, ]) 现在,在“详细信息”视图中,我想确保输入的URL有效,如果无效,则阻止更改 使用routerCanDeactivate不起作用,因为只有当组件由于路由更改而被删除时才会调用它,而在本

我在angular 2中有一个子组件,它处理特定级别之后的所有管线,该管线在父组件中定义为

@RouteConfig([
    { path: '/*other', name: 'Detail', component: DetailsViewComponent, useAsDefault: true },
])
现在,在“详细信息”视图中,我想确保输入的URL有效,如果无效,则阻止更改

使用
routerCanDeactivate
不起作用,因为只有当组件由于路由更改而被删除时才会调用它,而在本实现中不是这样

不幸的是,在查看大多数API时,仍然缺少文档。

1。 您可以在子路由上使用
@CanActivate
,路由器将调用该子路由来决定路由激活,从而更改路由

用法:

从'path/to/isUrlValid service'导入{checkvalidul};
@组件({选择器:'控制面板cmp',模板:`设置:…`})
@CanActivate(){//在此处进行检查并返回true/false
返回checkValidUrl.isValid(document.url);
//isValid是检查有效性的函数
}
类子组件{
}
但你必须对每个孩子都这样做


2. 如果您想要一次性解决方案,您可以创建自己的


您是在谈论处理无效的url吗?是的,在某种程度上,url是有效的,但最后一部分不是。e、 g..../details/a/b/c有效,但…/details/a/b/d无效,details视图处理…/details/*之后的任何路由器。它将向后端发出一个请求,如果响应是404,它将阻止url更改哦,似乎renavigate()正是我所需要的,只是尝试了一个简单的测试。(在提出问题之前应该先尝试一下。你说的renavigate()是什么意思)?在更改路由之前,请查看调用了哪个。我一定是做错了什么。正在调用CanActivate,但当我返回false时,URL仍然设置为新的utls。作为一个快速测试,如果URL设置为…/“test”,我尝试返回false,我希望如果返回false,URL会返回到以前的URL,但这并不正确ppen.我通过跟踪URL并在URL无效时调用_router.navigateByUrl(prevurl)解决了这个问题。这是可行的,但使用CanActivate会更简单。这是我的一个限制。您还可以使用router.events检查路由是否被拒绝访问,然后重新路由回。