как уведомить пользователя о состоянии сетевого подключения в ionic2

Согласно моему приложению, я должен уведомлять пользователя всякий раз, когда он отключается от сети. Поэтому в провайдере я использовал две функции: одна возвращает true в онлайн-состоянии, а другая возвращает true в автономном состоянии. В app.component.ts я проверяю, находится ли приложение в онлайн-состоянии или нет, вызывая "isOnline ()" провайдера. Здесь код провайдера ..

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import { Network } from '@ionic-native/network';
import { Platform } from 'ionic-angular';
import {Observable} from 'rxjs/Rx';
/*
  Generated class for the Connectivity provider.

  See https://angular.io/docs/ts/latest/guide/dependency-injection.html
  for more info on providers and Angular 2 DI.
*/
declare var Connection;
@Injectable()
export class Connectivity {
	onDevice: boolean;
	myObservable :any;
  constructor(public http: Http,public platform: Platform,public network:Network) {
    console.log('Hello Connectivity Provider');
    this.onDevice = this.platform.is('cordova');
    /*
    this.myObservable = Observable.create(observer => {
    	let result = this.isOffline();
    	observer.next(result);
	});
  */
 
  }
isOnline(): boolean {
	
    if(this.onDevice && this.network.type){
      return this.network.type !== Connection.NONE;
    } else {
      return navigator.onLine;
    }
    
    
  }
 
  isOffline(): boolean {
  
    if(this.onDevice && this.network.type){
      return this.network.type === Connection.NONE;
    } else {
      return !navigator.onLine;  
    }
    
  }

}

внутри конструктора app.component.ts я вызываю isOnline ()

constructor(platform: Platform,public connectivityService: Connectivity) {
  
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      StatusBar.styleDefault();
      Splashscreen.hide();
      /*this.connectivityService.myObservable.subscribe((data) => {
        console.log(data);
        
      });*/
     if(this.connectivityService.isOnline()){
      console.log("online");
      
    }
    else {
      console.log("offline");
    }
           
    });
    

это работает нормально, но когда я отключаюсь от сети, мне нужно снова обновить браузер, тогда я могу видеть только "офлайн" на консоли. как уведомить пользователя, как только сеть потеряна


person Lisa    schedule 03.04.2017    source источник
comment
Взгляните здесь: ionicframework.com/docs/native/network - Как вы уведомляю пользователя, решать вам. Может быть, использовать предупреждение?   -  person Schlaus    schedule 03.04.2017
comment
есть ли другой способ уведомить пользователя вместо того, чтобы показывать простое предупреждение?   -  person Lisa    schedule 04.04.2017
comment
Могу ли я использовать оповещение у поставщика и подписаться на него более чем на одной странице? Может ли кто-нибудь сослаться на любую ссылку, связанную с этим   -  person Lisa    schedule 04.04.2017


Ответы (3)


Метод onchange () работает некорректно ..

https://github.com/driftyco/ionic-native/issues/1043

Я использовал решение с форума github:

Observable.merge(this.network.onConnect(), this.network.onDisconnect())
.subscribe(e => console.log(e), err => console.error(err));
person F.West    schedule 17.05.2017

Ознакомьтесь с документацией Ionic Native Network.

В частности, метод onChange ():

onchange()
Returns an observable to watch connection changes

Returns: Observable<any>
person EyeOnicToo    schedule 03.04.2017
comment
я пробовал, но застрял с ошибкой :: this.network.onchange (...). подписка не является функцией - person Lisa; 04.04.2017

Я получаю эту ошибку. This.network.onchange (...). Subscribe не является функцией, и я использую ionic native 3.6.0. Вот так выглядит код встроенного плагина Network.

/**
 * Returns an observable to watch connection changes
 * @return {Observable<any>}
 */
Network.prototype.onchange = function () {
    return Observable.merge(this.onConnect(), this.onDisconnect());
};

То же самое в вашем коде может решить проблему.

import { Observable } from 'rxjs/Observable';

Observable.merge(this.network.onConnect(), this.network.onDisconnect()).subscribe(() => {
  this.getNetworkInfo();
});
person Jonas Tomanga    schedule 29.05.2017