Vous êtes ici: Vous êtes le premier à donner votre avis sur le statut de votre site? albo coś innego?
PS: - znalazłem navigator.onLine
w angularJs, ale wydaje się, Aucune nouvelle publication w angular2.
jak zasugerował w odpowiedzi poniżej navigator.onLine
w pracy z angular2, ale nadal nie działa poprawnie dlaczego? working example here
(2018) Code mis à jour pour rxjs6
Cela fonctionne totalement avec angular2. Il est évident que c'est différent d'angularJS car ni $ scope ni $ apply n'existent plus. RxJS rend cela facile, cependant! Testé sur Chrome 53:
modèle:
<p>{{online$ | async}}</p>
composant:
import { Observable, fromEvent, merge, of } from 'rxjs';
import { mapTo } from 'rxjs/operators';
@Component({ /* ... */ })
export class MyComponent {
online$: Observable<boolean>;
constructor() {
this.online$ = merge(
of(navigator.onLine),
fromEvent(window, 'online').pipe(mapTo(true)),
fromEvent(window, 'offline').pipe(mapTo(false))
);
}
}
Comme je l'ai coché, le navigateur est un objet global comme une fenêtre. Vous pouvez utiliser in dans angular2 et cela a bien fonctionné pour moi.
import {Component} from 'angular2/core';
@Component({
selector: 'my-app',
template:`
navigator.onLine
{{onlineFlag}}
`
})
export class AppComponent {
public onlineFlag =navigator.onLine;
}
En utilisant Angular 6+ et Rxjs 6+, vous pouvez le faire de la manière suivante:
import { Observable, fromEvent, merge, of } from 'rxjs';
import { mapTo } from 'rxjs/operators';
online$: Observable<boolean>;
constructor() {
this.online$ = merge(
of(navigator.onLine),
fromEvent(window, 'online').pipe(mapTo(true)),
fromEvent(window, 'offline').pipe(mapTo(false))
)
}
Voici un demo (basculer le réseau dans les outils de développement)
Approche sûre pour écouter les états du réseau
Les réponses données ci-dessus fonctionnent bien mais ne sont pas considérées comme une approche sûre.
1.Les objets dépendants du navigateur tels que window ne doivent pas être référencés directement. Vérifiez toujours la plate-forme.
2. En outre, des fonctionnalités telles que la connexion réseau doivent être encapsulées dans un service.
Ci-dessous, le ConnectionService qui peut être abonné pour écouter les états du réseau. Il suit le style rxjs 6 .
Code complet
import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
import { Observable, fromEvent, merge, empty } from 'rxjs';
import { isPlatformBrowser } from '@angular/common';
import { mapTo } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class ConnectionService {
private connectionMonitor: Observable<boolean>;
constructor(@Inject(PLATFORM_ID) platform) {
if (isPlatformBrowser(platform)) {
const offline$ = fromEvent(window, 'offline').pipe(mapTo(false));
const online$ = fromEvent(window, 'online').pipe(mapTo(true));
this.connectionMonitor = merge(
offline$, online$
);
} else {
this.connectionMonitor = empty();
}
}
monitor(): Observable<boolean> {
return this.connectionMonitor;
}
}
dans le composant, vous pouvez écouter en vous abonnant à monitor () ou directement en HTML à l'aide d'un canal asynchrone.
Aller avec ce simple piratage.
Travailler dans 5 angulaire ou plus tard
constructor(){
setInterval(()=>{
if(navigator.onLine){
//here if it is online
}else{
//here if it is offline
}
}, 100)
}
écrivez ceci dans le constructeur de app.component.ts ou dans votre application bootstrapPas besoin de bibliothèque externe ..