После небольшого поиска и с помощью ответа @ AlokeT.Я получил решение этой проблемы.
@ Предложение AlokeT показывает страницу потери соединения, как только пользователь потерял свою сеть.но мое требование - показать эту страницу потери соединения, пока он / она пытается перейти на другую страницу.
И в этом ответе я только что добавил эту недостающую часть.
Для этого япросто обновите этот isNetworkStopped
флаг из Guard, и потому что каждый CanActivate guard выполняется до запуска навигации.Таким образом, компонент потери соединения будет отображаться при изменении пользователем пути.
Существует код NetworkService
, который я использую в NetworkGuard,
@Injectable({providedIn: 'root'})
export class NetworkService {
online: boolean;
isNetworkStopped = false;
constructor() {
this.online = window.navigator.onLine;
fromEvent(window, 'online').subscribe(e => {
this.online = true;
});
fromEvent(window, 'offline').subscribe(e => {
this.online = false;
});
}
}
Здесь, в приведенном выше коде, я простодобавлен флаг isNetworkStopped
.И обновил этот флаг с NetworkGuard
, значит, пока пользователь пытается перейти на следующую страницу и не нашел сети.
А также убрал навигацию из NetworkGuard.См. Ниже мой обновленный код NetoworkGuard
@Injectable({providedIn: 'root'})
export class NetworkGuard implements CanActivate {
constructor(private network: NetworkService) {
}
canActivate(next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
if (this.network.online) {
return true;
}
this.network.isNetworkStopped = true;
return false;
}
}
И на основании этого флага мне удалось показать компонент ConnectionLost.Для этого ConnectionLost
компонент добавляется при условии на основе шаблона корневого компонента.
app.component.html
<router-outlet *ngIf="!networkService.isNetworkStopped"></router-outlet>
<app-connection *ngIf="networkService.isNetworkStopped"></app-connection>
И из компонента ConnectionLost, если пользователь нажимает кнопку перезагрузки.При проверке сетевого подключения я обновил isNetworkStopped
флаг NetworkService
.