CanDeActivate()在同一路线上只运行一次

时间:2017-02-17 07:08:38

标签: angular typescript

我在CanDeActivate()中遇到Angular2的问题。该场景是当用户从编辑屏幕离开页面时,弹出窗口带有“是”,“否”和“取消”按钮。 当用户点击取消按钮时,它会关闭弹出窗口,当用户点击没有按钮时,它会关闭弹出窗口,并重定向到用户点击导航的另一个页面。

假设应用程序有3个模块A,B和C.模块C有编辑屏幕。当用户在该页面上进行编辑而不保存用户在模块B上的点击时。弹出窗口带有“是”,“否”和“取消”按钮。在取消按钮上,它保留在同一页面上,但用户再次单击模块B,此处没有任何操作。如果用户点击模块A,弹出窗口就会出现。

我陷入了这个问题。如果有人可以提供帮助,我会分享我的代码。非常感谢。提前谢谢。

MyComponent.ts

canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean = () => {
        if (this.isEdited) {
            this.showConfirmationModal = true;
            this.canLeavePage.asObservable().first();
            return false;
        }
        return true;
    }

灿Deactivate.guard.ts

export interface CanComponentDeactivate {
    canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}

@Injectable()
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
    canDeactivate(component: CanComponentDeactivate) {
        let can = component.canDeactivate();
        if (!can) {
            return false;
        }

        return true;
    }
}

1 个答案:

答案 0 :(得分:0)

这是2.3.0中修复的问题

  

路由器:每次一次又一次地导航到同一个网址失败时会运行警卫(#13209)(d46b8de)

https://github.com/angular/angular/blob/master/CHANGELOG.md#230-2016-12-07