我有一个角度为2的子组件,它在一定级别之后处理所有路由,路由在父组件中定义为
@RouteConfig([
{ path: '/*other', name: 'Detail', component: DetailsViewComponent, useAsDefault: true },
])
现在,在详情视图中,我想确保输入的网址有效,如果不能阻止更改。
使用routerCanDeactivate
不起作用,因为只有在因路由更改而删除组件时才会调用此方法,但在此实现中并非如此。
答案 0 :(得分:2)
您可以在您的子路由上使用@CanActivate
,路由器将调用该路由来决定路由激活,从而改变路由。
<强>用法:强>
import {checkValidUrl} from 'path/to/isUrlValid-service';
@Component({selector: 'control-panel-cmp', template: `<div>Settings: ...</div>`})
@CanActivate(){ //do your checking here and return true/false
return checkValidUrl.isValid(document.url);
// isValid is your function to check the validity
}
class ChildComponent {
}
但是你必须对每个孩子都这样做。
如果您想要一次性解决方案,可以创建自己的<custom-router-outlet>