如何在Angular2中检查用户是否有网络连接?

如何在Angular2中检查用户是否有网络连接?

问题描述:

如何在API打击时检查Angular2中的互联网连接,每当我的应用程序API被打到服务器时,有时用户是 离线(我的意思是没有互联网连接),那么我将如何检查互联网连接?是否有一些特殊的互联网连接状态代码? 还是别的?如何在Angular2中检查用户是否有网络连接?

PS: - 我在angularJs中发现了navigator.onLine,但在angular2中似乎不起作用。

更新

如sudheer建议如下navigator.onLine答案与angular2工作,但仍然无法正常工作,为什么? working example here

+1

我与Windows 10和Chrome检查这一点。如果至少连接了一个网络适配器,它总是返回“真”。所以如果你已经安装了一个虚拟适配器,比如VirtualBox的“HostOnly-Network”,你总是会得到'true',直到你禁用它。 :( – Stefan

正如我检查导航器是像窗口的全局对象。你可以在angular2中使用它,它对我来说工作得很好。

import {Component} from 'angular2/core'; 
@Component({ 
    selector: 'my-app', 
    template:` 
navigator.onLine 
{{onlineFlag}} 

` 
}) 
export class AppComponent { 
    public onlineFlag =navigator.onLine; 
} 
+0

总是显示'true'为什么会这样? –

+1

在这个例子中工作正常,请检查[here](http://plnkr.co/edit/7sCPqjoeUdFpBNmcXoKO?p=preview)。 –

+0

我该如何在这里检查plunker离线模式?(离线模式,如果我做了一些改变,然后页面不能刷新,所以我不能检查) –

它完全适用于angular2。显然它与angularJS不同,因为$ scope和$ apply都不存在了。虽然RxJS使这个很简单!经测试在Chrome 53:

模板:

<p>{{online$ | async}}</p> 

控制器:

online$: Observable<boolean>; 

constructor() { 
    this.online$ = Observable.merge(
    Observable.of(navigator.onLine), 
    Observable.fromEvent(window, 'online').mapTo(true), 
    Observable.fromEvent(window, 'offline').mapTo(false) 
) 
} 
+0

总是返回'true'为什么这样? –

+0

使用firefox j2L4e

+0

我正在使用chrome –

起初,j2L4e的回答并没有为我(在Chrome测试)工作。我在ngIf的括号中围绕着我的布尔,稍微调整了一下,这样就结束了工作。

<md-icon class="connected" mdTooltip="No Connection" *ngIf="!(isConnected | async)">signal_wifi_off</md-icon>

import { Component, OnInit } from '@angular/core'; 
import { Observable } from 'rxjs/Observable'; 
import { Subscription } from 'rxjs/Subscription'; 
import 'rxjs/Rx'; 

@Component({ 
    selector: 'toolbar', 
    templateUrl: './toolbar.component.html', 
    styleUrls: ['./toolbar.component.css'] 
}) 
export class ToolbarComponent implements OnInit { 
    isConnected: Observable<boolean>; 

    constructor() { 
    this.isConnected = Observable.merge(
     Observable.of(navigator.onLine), 
     Observable.fromEvent(window, 'online').map(() => true), 
     Observable.fromEvent(window, 'offline').map(() => false)); 
    } 

    ngOnInit() { 

    } 
} 
+3

为什么导入'rxjs/Rx'库。这是巨大而不好的做法。此外,Observable和Subscription已经被导入。 –

+0

它总是连接!连接标志永远是真的(在最新的Chrome版本上),不知道为什么状态没有改变! –