Я новичок в 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]
}
]
}