手动更改路线或按后退/前进时,停用守卫呼叫两次

Bog*_*dan 6 angular2-routing angular

我正在使用 Angular 2.0 稳定版本,并希望用户在离开页面之前进行确认(他们的更改不会被保存)。

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

重现步骤:

  1. 下载并设置https://github.com/iurii-kyrylenko/angular2-webpack
  2. 设置可以停用防护

应用程序路由.ts

{ path: 'task1', component: Task1Component, canDeactivate: ['candeactivate'] },
Run Code Online (Sandbox Code Playgroud)

应用程序/task-1/task1.module.ts

@NgModule({
    imports: [CommonModule],
    declarations: [Task1Component],
    exports: [Task1Component],
    providers: [
        {
            provide: 'candeactivate',
            useValue: () => {
                console.log("can deactivate");
                return confirm("Test");
            }
        }
    ]
})
export class Task1Module {}
Run Code Online (Sandbox Code Playgroud)
  1. 从“localhost:8080/#/task1”开始
  2. 手动将 url 更改为“localhost:8080/#/task2”

请注意,系统会要求您两次确认。我找到了https://github.com/angular/angular/issues/11754,但目前没有任何解决方案。

有什么解决方法吗?