mirror of https://github.com/abpframework/abp.git
committed by
Mahmut Gundogdu
2 changed files with 73 additions and 2 deletions
@ -0,0 +1,71 @@ |
|||
# Internet Connection Service |
|||
`InternetConnectionService` is a service which is exposed by `@abp/ng.core` package. **If you want to detect whether you are connected to the internet or not, you can use this service.** |
|||
|
|||
|
|||
### internet-connection-service.ts |
|||
``` |
|||
import { DOCUMENT } from '@angular/common'; |
|||
import { Injectable, computed, inject, signal } from '@angular/core'; |
|||
import { BehaviorSubject } from 'rxjs'; |
|||
|
|||
@Injectable({ |
|||
providedIn: 'root', |
|||
}) |
|||
|
|||
export class InternetConnectionService{ |
|||
protected readonly window = inject(DOCUMENT).defaultView; |
|||
protected readonly navigator = this.window.navigator; |
|||
|
|||
/* BehaviorSubject */ |
|||
private status$ = new BehaviorSubject<boolean>(navigator.onLine) |
|||
|
|||
/* creates writableSignal */ |
|||
private status = signal(navigator.onLine); |
|||
|
|||
/* READONLY ANGULAR SIGNAL */ |
|||
networkStatus = computed(() => this.status()) |
|||
|
|||
constructor(){ |
|||
this.window.addEventListener('offline', () => this.setStatus()); |
|||
this.window.addEventListener('online', () => this.setStatus()); |
|||
} |
|||
|
|||
private setStatus(){ |
|||
this.status.set(navigator.onLine) |
|||
this.status$.next(navigator.onLine) |
|||
} |
|||
|
|||
/* returns OBSERVABLE */ |
|||
get networkStatus$(){ |
|||
return this.status$.asObservable() |
|||
} |
|||
} |
|||
``` |
|||
|
|||
## Getting Started |
|||
When you inject InternetConnectionService you can get the current internet status also if status changes you can catch them immediately. |
|||
|
|||
As you can see from the code above, `InternetConnectionService` is providing 2 alternatives for catching network status; |
|||
1. Signal (readonly) |
|||
2. Observable |
|||
|
|||
|
|||
# How To Use |
|||
İt's easy just inject the service and get network status |
|||
|
|||
**You can get via signal** |
|||
``` |
|||
class someComponent{ |
|||
internetConnectionService = inject(InternetConnectionService); |
|||
isOnline = this.internetConnectionService.networkStatus |
|||
} |
|||
``` |
|||
**or you can get as observable** |
|||
``` |
|||
class someComponent{ |
|||
internetConnectionService = inject(InternetConnectionService); |
|||
isOnline = this.internetConnectionService.networkStatus$ |
|||
} |
|||
``` |
|||
|
|||
That's all, feel free to try on your template |
|||
Loading…
Reference in new issue