Angular 检查web应用是否联机或脱机

Angular 检查web应用是否联机或脱机,angular,rxjs,Angular,Rxjs,下面是检查应用程序在线或离线的代码: this.online$ = Observable.merge( Observable.of(navigator.onLine), Observable.fromEvent(window, 'online').map(() => true), Observable.fromEvent(window, 'offline').map(() => false) )

下面是检查应用程序在线或离线的代码:

 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);
            }
        });
但它总是返回一个真值,这意味着他们在线,但这是错误的结果。我关闭了系统互联网,不太可能返回相同的结果(真)

这将根据浏览器联机状态发出truefalse

这将根据浏览器联机状态发出truefalse


我的应用程序中有以下代码:

// 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));
//如果使用RxJS<6.0.0-alpha.3,请调整导入。
从“rxjs”导入{BehaviorSubject,fromEvent};
/**
*浏览器是否指示设备处于联机状态。
*/
export const online subject=新行为主体(true);
常量handleOnlineChange=(联机:布尔)=>{
if(在线!==onlineSubject.getValue()){
在线主题。下一步(在线);
}
};
HandlineChange(navigator.onLine);
fromEvent(窗口,'online')。订阅(()=>handleOnlineChange(true));
fromEvent(窗口“脱机”).subscribe(()=>handleOnlineChange(false));

希望这能帮到你。

我的应用程序中有以下代码:

// 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));
//如果使用RxJS<6.0.0-alpha.3,请调整导入。
从“rxjs”导入{BehaviorSubject,fromEvent};
/**
*浏览器是否指示设备处于联机状态。
*/
export const online subject=新行为主体(true);
常量handleOnlineChange=(联机:布尔)=>{
if(在线!==onlineSubject.getValue()){
在线主题。下一步(在线);
}
};
HandlineChange(navigator.onLine);
fromEvent(窗口,'online')。订阅(()=>handleOnlineChange(true));
fromEvent(窗口“脱机”).subscribe(()=>handleOnlineChange(false));

希望这能帮到你。

最轻的版本,总是返回
导航器。联机
值:

import{fromEvent,merge,of}来自'rxjs';
从“rxjs/operators”导入{map};
Isofline$=合并(
of(null),
fromEvent(窗口“联机”),
fromEvent(窗口“脱机”)
).pipe(地图(()=>!navigator.onLine));

最轻的版本,始终返回
导航器。联机
值:

import{fromEvent,merge,of}来自'rxjs';
从“rxjs/operators”导入{map};
Isofline$=合并(
of(null),
fromEvent(窗口“联机”),
fromEvent(窗口“脱机”)
).pipe(地图(()=>!navigator.onLine));

的可能重复项,但此项在可见情况下不起作用。您可以使用速记
.mapTo(true)
而不是
.map(()=>true)
。您不需要这样做,而且它需要另一个导入,但这是一个很好的速记。可以使用速记
.mapTo(true)
而不是
.map(()=>true)
。你不需要,它需要另一个导入,但这是一个很好的速记。