У меня есть ожидающий изменения охранник, например
import {CanDeactivate} from '@angular/router';
export interface ComponentCanDeactivate {
canDeactivate: () => boolean | Observable<boolean>;
}
export class PendingChangesGuard implements CanDeactivate<ComponentCanDeactivate> {
canDeactivate(component: ComponentCanDeactivate): boolean | Observable<boolean> {
// if there are no pending changes, just allow deactivation; else confirm first
return component.canDeactivate() ?
true :
// NOTE: this warning message will only be shown when navigating elsewhere within your angular app;
// when navigating away from your angular app, the browser will show a generic warning message
// see http://stackoverflow.com/a/42207299/7307355
confirm('WARNING: You have unsaved changes. Press Cancel to go back and save these changes, or OK to lose these changes.');
}
}
Моя проблема в том, что у меня также есть некоторые элементы управления вкладками, которые привязаны к параметрам маршрута страницы, поэтому при переходе по вкладке обновляются параметры маршрута и наоборот. Он обновил параметр, перейдя к текущему маршруту с новым параметром, который не перезагружает компонент, поскольку это все еще текущий маршрут. Моя проблема в том, что я не хочу, чтобы эти изменения маршрута считались деактивацией PendingChangesGuard, поскольку компонент все еще находится на странице в другой вкладке.
В идеале я мог бы передать некоторые параметры охраннику, сообщая ему, какие параметры маршрута следует игнорировать в случае повторного перехода к текущему маршруту, а затем каким-то образом обнаруживать внутри охранника, если единственные изменения - это один из игнорируемых параметров . Я не уверен, как обнаружить изменения в таких параметрах и идеях?
canDeactivate
, вы можете использовать его напрямую для построения вашей логики canDeactivate (компонент: ComponentCanDeactivate, route: ActivatedRouteSnapshot, состояние: RouterStateSnapshot). - person Madhu Ranjan   schedule 28.04.2017