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);
}
});
但它总是返回一个真值,这意味着他们在线,但这是错误的结果。我关闭了系统互联网,不太可能返回相同的结果(真)
这将根据浏览器联机状态发出true或false
这将根据浏览器联机状态发出true或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));
希望这能帮到你。我的应用程序中有以下代码:
// 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)
。你不需要,它需要另一个导入,但这是一个很好的速记。