CanDeactivate Route Guard Показывает выбранный маршрут как активный, даже если нажать на кнопку отмены - PullRequest
0 голосов
/ 14 октября 2018

Я новичок в Angular, и я также искал проблему в Интернете и не смог найти решение.Кто-нибудь может мне помочь, пожалуйста!Это так важно для меня.

Я реализовал возможность деактивировать охрану маршрута, которая срабатывает при переходе в другое меню, когда форма dirty.

Проблема в том, что яв меню клиента и делает форму грязной и перейти к меню активации, появляется всплывающее окно, которое принимает мое подтверждение, чтобы покинуть страницу (работает как положено).Но когда я нажимаю кнопку «Отмена» (хочет остаться на странице формы (клиент)), она в любом случае удерживает меня на странице, но вкладки активации показывают, что она активна.

@Injectable()
export class CanDeactivateGuard implements CanDeactivate < CanComponentDeactivate > {
  canDeactivate(
    component: CanComponentDeactivate, 
    currentRoute: ActivatedRouteSnapshot,
    currentState: RouterStateSnapshot
  ): Observable < boolean > | Promise < boolean > | boolean {
    const url: string = currentState.url;
    console.log('currentState: ' + currentState + '\n component.canDeactivate' + component.canDeactivate);
    return component.canDeactivate ? component.canDeactivate() : true;
  }
}

canDeactivate Метод в компоненте

canDeactivate(): Observable < boolean > | boolean {
  if (this.clientForm.dirty) {
    return this.dialogService.confirm('Do you want to Discard changes?');
  }
  return true;
}

routing.ts

{
  path: 'configuration',
  component: AdminstratorComponent,
  children: [{
      path: 'client',
      component: ClientComponent,
      outlet: 'configuration',
      canDeactivate: [CanDeactivateGuard]
    },
    {
      path: 'activation',
      component: ActivationComponent,
      outlet: 'configuration',
      canDeactivate: [CanDeactivateGuard]
    }
  ]
}
...