2017-03-21 6 views
1

Hier ist ein Code zu überprüfen Bewerbung online oder offline ist:überprüfen Web-App ist online oder offline

this.online$ = Observable.merge(
      Observable.of(navigator.onLine), 
      Observable.fromEvent(window, 'online').map(() => true), 
      Observable.fromEvent(window, 'offline').map(() => false) 
     ) 
     this.online$.subscribe(isOnline=>{ 
      if(isOnline){ 
       console.log(isOnline); 
      }else{ 
       console.log("you are offline"); 
       console.log(isOnline); 
      } 
     }); 

Aber es zurückgeben immer ein wahres es bedeutet, sie online sind, aber es ist falsch Ergebnis. Ich habe System Internet ausgeschaltet, unwahrscheinlich, dass sie dasselbe Ergebnis (wahr) zurückgeben.

+3

Mögliche Duplikate von [Wie überprüft man, ob der Benutzer eine Internetverbindung hat oder nicht in Angular2?] (Http://stackoverflow.com/questions/39571231/how-to-check-whether-user-has-internet-connection- oder-nicht-in-angular2) –

+0

Aber das ist nicht im beobachtbaren Fall arbeiten. – QuokMoon

+0

Sie können die Kurzschrift '.mapTo (true)' anstelle von '.map (() => true)' verwenden. Sie müssen nicht und es erfordert einen anderen Import, aber es ist eine nette Kurzschrift. –

Antwort

1
this.online$ = Observable.merge(
     Observable.of(navigator.onLine), 
     Observable.fromEvent(window, 'online').mapTo(true), 
     Observable.fromEvent(window, 'offline').mapTo(false) 
    ) 
    this.online$.subscribe(isOnline=>{ 
     if(isOnline){ 
      console.log(isOnline); 
     }else{ 
      console.log("you are offline"); 
      console.log(isOnline); 
     } 
    }); 

Sie können es verwenden, und Ihre Verbindung überprüfen, wenn ab und wenn sie auf. Sie können den richtigen Wert erhalten, wie wenn Verbindung aus dann erhalten Sie False, und wenn die Verbindung ist dann erhalten Sie True.

0

Ich habe den folgenden Code in meiner App:

// Adjust the imports if you use RxJS < 6.0.0-alpha.3. 
import { BehaviorSubject, fromEvent } from 'rxjs'; 

/** 
* Whether the browser indicates that the device is online. 
*/ 
export const onlineSubject = new BehaviorSubject<boolean>(true); 

const handleOnlineChange = (online: boolean) => { 
    if (online !== onlineSubject.getValue()) { 
    onlineSubject.next(online); 
    } 
}; 

handleOnlineChange(navigator.onLine); 

fromEvent(window, 'online').subscribe(() => handleOnlineChange(true)); 
fromEvent(window, 'offline').subscribe(() => handleOnlineChange(false)); 

Hope this den Trick für Sie tut.

Verwandte Themen