Angular 手动更改路线或按下后退/前进按钮时,停用两次呼叫的防护

Angular 手动更改路线或按下后退/前进按钮时,停用两次呼叫的防护,angular,angular2-routing,Angular,Angular2 Routing,我使用的是angular 2.0稳定版,希望用户在离开页面之前确认(他们的更改不会被保存) 问题是,如果用户希望访问延迟加载的页面,那么实现的“CanDeactivate”保护将被调用两次。(使用哈希定位策略) 复制步骤: 下载和安装 设置CanDeactivate防护罩 app.routing.ts app/task-1/task1.module.ts 从“localhost:8080/#/task1”开始 手动将url更改为“localhost:8080/#/task2” 请注意,您被要求两

我使用的是angular 2.0稳定版,希望用户在离开页面之前确认(他们的更改不会被保存)

问题是,如果用户希望访问延迟加载的页面,那么实现的“CanDeactivate”保护将被调用两次。(使用哈希定位策略)

复制步骤:

  • 下载和安装
  • 设置CanDeactivate防护罩
  • app.routing.ts

    app/task-1/task1.module.ts

  • 从“localhost:8080/#/task1”开始
  • 手动将url更改为“localhost:8080/#/task2”
  • 请注意,您被要求两次进行确认。我找到了,但目前还没有任何解决方案


    是否有解决方法?

    您找到了解决方案吗?@skgyan否。我最终将第一次确认的值保存在一个cookie中,该cookie的有效期为1秒,如果cookie不是空的,则跳过第二次确认。对我来说,canActivate导致了此问题。我用可观察的方法来解决这个问题。从这里得到帮助-
    { path: 'task1', component: Task1Component, canDeactivate: ['candeactivate'] },
    
    @NgModule({
        imports: [CommonModule],
        declarations: [Task1Component],
        exports: [Task1Component],
        providers: [
            {
                provide: 'candeactivate',
                useValue: () => {
                    console.log("can deactivate");
                    return confirm("Test");
                }
            }
        ]
    })
    export class Task1Module {}