Angular 2。如何防止路线改变

标签 angular angular2-routing

我在 Angular 2 中有一个子组件,它处理特定级别之后的所有路由,该路由在父组件中定义为这样

@RouteConfig([
    { path: '/*other', name: 'Detail', component: DetailsViewComponent, useAsDefault: true },
])

现在,在详细信息 View 中,我想确保输入的 URL 有效,如果无效,则阻止更改。

使用 routerCanDeactivate 不起作用,因为仅当组件因路由更改而被删除时才会调用,而本实现中并非如此。

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

最佳答案

1.

您可以使用@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 {
}

但是您必须对每个 child 执行此操作。


2.

如果您想要一次性解决方案,您可以创建自己的 <custom-router-outlet>

as Described and Implemented here

关于 Angular 2。如何防止路线改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36248240/

相关文章:

angular - 使用routerlink导航到另一个页面并根据Angular2中的参数获取详细信息

angular - 导入 Angular 组件以在所有模块中可用

angular - IE9 PathLocationStrategy Angular 4

Angular 2 组件少路由,在匹配特定 URL 时执行任何逻辑并进一步重定向

html - 刷新(提交)进程 Angular2 和 Firebase 上的页面

Angular 2 : How to capture all user event

javascript - Angular 4按钮,带有click(returnsbooleanVAR)功能和routerlink + boolean VAR计时

使用@ngneat/until-destroy npm 包取消订阅 Angular 9 observable

javascript - 如何在 angular2 中使用 winwheel.js 回调

javascript - Angular 6 在客户端以 pdf 格式保存 Material 向导数据