Функциональность кнопки возврата браузера не работает должным образом для angular 7
Реализован canDeactive охранник, после того, как нажали кнопку браузере, это всплывающие окна модели и спросить "Да/нет". После нажатия кнопки " нет "он остается на той же странице, и снова, если я нажму кнопку "Назад", появится всплывающее окно, а после нажатия кнопки "нет/да" он перенаправляется на пустой url-адрес страницы из истории браузера вместо того, чтобы оставаться на прежнем месте.
Спасибо за поддержку .
Что я уже пробовал:
<pre>import { Injectable, HostListener, } from '@angular/core'; import { CanDeactivate, ActivatedRoute, Router, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; : : : : export abstract class myCompCanDeactivate { abstract canDeactivate(): boolean; @HostListener('window:beforeunload', ['$event']) unloadNotification($event: any) { if (!this.canDeactivate()) { $event.returnValue = true; } } } @Injectable() export class DeactivateGuardService implements CanDeactivate<myCompCanDeactivate> { showDashboard:boolean=false; islogout:any; sStep:number; demoLastSection:number = 0; menuitem:SitefinityPortalMenu; constructor(private next:ActivatedRoute,private resourceService: ResourceService, private matDialog: MatDialog,private browserGlobalService: BrowserGlobalService, private route:Router ){} async canDeactivate(component: myCompCanDeactivate,currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Promise<boolean> { if(!component.canDeactivate()){ if (this.browserGlobalService.GlobalLogout=== 'logout') { this.browserGlobalService.GlobalLogout = ''; return true; } //Get Portal left menus from sitefinity. this.menuitem = await this.resourceService.getPortalMenus("Portal_Left_Menu").toPromise(); var str:SitefinityMenuItem[] = this.menuitem.MenuItems.filter((m)=>{return m.LinkUrl.includes(nextState.url) && m.Hidden===false}); if ( nextState.url!='/demoSite' && nextState.url === (str.length>0?str[0].LinkUrl:'') ){return true; } this.sStep = SaleSteps.Review; this.demoLastSection = PSSections.signStep; if (this.browserGlobalService.PLSavedSection != this.demoLastSection || this.browserGlobalService.PLSavedSection != this.sStep ){ let modalData = new ModalData(); modalData.Header = this.resourceService.getViewLabel("ModalHeader_BrowserBack"); modalData.Body = this.resourceService.getViewLabel("ModalBody_BrowserMessage"); modalData.ControlArray = [ new ButtonAction(this.resourceService.getViewLabel("ModalCancel_Yes"), "YES"), new ButtonAction(this.resourceService.getViewLabel("ModalCancel_No"), "NO") ]; let dialogRef = this.matDialog.open(GspModalComponent, { data: modalData }); dialogRef.afterClosed().subscribe(result => { if (result && result.toLowerCase() === "yes") { this.browserGlobalService.callComponentMethod(""); // this.route.navigated = true; return false; } return false; }); } } return false; } }
Richard Deeming
Мне не совсем ясно, как это происходит. unloadNotification
способ и DeactivateGuardService
связаны между собой. Но вы определенно не сможете позвонить никому async
методы в области onbeforeunload[^] событие.