CanDeactivate Guards.
Возможно ли, что при выходе из компонента canDeactivate не только отображает окно подтверждения с да / нет, но и перемещается к другому компоненту?Примерно так:
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
if (this.registrationService.isRegistered()) {
return true;
} else {
if (!confirm('If you do not register, your data will be lost. Click Cancel to go to Registration page.')) {
console.log('before');
this.router.navigate(['register']); // <----
console.log('after');
return false;
} else { return true; }
}
}
Теперь это не работает.Когда нажимаете кнопку «Отмена», снова и снова открывайте окно подтверждения, и в конечном итоге это «до», «после».Переадресация на страницу регистрации только в том случае, если сначала нажать кнопку «Отмена», а затем кнопку «ОК».
ОБНОВЛЕНИЕ: Кажется, я решил их с помощью PROMISE
private isCanDeactivate: boolean;
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
if (this.registrationService.isRegistered()) {
return true;
} else {
if (!confirm('If you do not register, your data will be lost. Click Cancel to go to Registration page.')) {
console.log('press Cancel');
this.retrieve().then(() => this.afterPromise());
return this.isCanDeactivate;
} else {
console.log('press Ok');
return true; }
}
}
private retrieve(): Promise<any> {
return new Promise((resolve) => {
this.retrieveDataResolver = resolve;
this.setIsCanDeactivate();
});
}
private setIsCanDeactivate(): void {
this.isCanDeactivate = true;
this.retrieveDataResolver();
}
private afterPromise() {
this.router.navigate(['register']);
}
Может кто-нибудь помочь с лучшим решением?