【问题标题】:How to validate routing and break it when not required in angular2如何在angular2中不需要时验证路由并中断它
【发布时间】:2017-10-10 04:13:27
【问题描述】:

我必须在路由上添加验证。当用户尝试从一个页面重定向到另一个页面时,我必须检查是否有任何未保存的更改。如果是,则显示模式以确认重定向,否则用户将停留在同一页面上。

我曾尝试使用 canActivate,但它仅在用户加载应用而不是内部路由时触发。

我正在寻找一种集中式解决方案,因为路由可以从控制器、视图或 href 完成。

为此,我订阅了 router.events,我可以在其中捕获所有路由事件。现在我只是想要一种阻止路由的方法并显示模式并跟踪或上次路由,以便如果用户单击确定,那么我可以继续路由。

如果它是 NavigationStart 事件,那么我必须根据条件中断路由。

请建议有没有办法做到这一点。

我必须检查应用程序中发生的每个路由。

【问题讨论】:

    标签: angular validation routing angular2-routing


    【解决方案1】:

    您必须将所有路线置于警卫之下,并且所有路线都是警卫的子路线。

    还可以使用canDeactivate检查数据是否保存。

    { path: 'guard', component:  GuardsComponent , canDeactivate:[CanDeactivateGuard]},
    

    可以停用

    import { Injectable } from '@angular/core';
    import { CanDeactivate } from '@angular/router';
    import { Observable } from 'rxjs/Observable';
    
    export interface CanComponentDeactivate {
      canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
    }
    
    @Injectable()
    export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
    
      canDeactivate(component: CanComponentDeactivate) {
        return component.canDeactivate ? component.canDeactivate() : true;
      }
    
    }
    

    【讨论】:

    • 嘿,我的所有路由都在应用程序的子路由中,有什么方法可以将其应用于智利路由
    猜你喜欢
    • 2018-06-30
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2017-04-27
    相关资源
    最近更新 更多