как я могу нажать страницу, только если в ionic3 включено интернет-соединение? - PullRequest
0 голосов
/ 21 февраля 2019

Мне действительно нужна твоя помощь, пожалуйста.Я пытаюсь определить, есть ли подключение к Интернету в моем мобильном приложении Ionic 3.Это работает правильно.но я должен щелкнуть любую ссылку сейчас, в этот раз, когда интернет отключен, теперь в этом случае у нас есть push-страница, только если интернет включен. Я не понимаю, как снова вызвать функцию onDisconnect?

//app.component.ts file
listenConnection(){
      // watch network for a disconnection if user is offline.......
      let disconnectSubscription = this.network.onDisconnect().subscribe(() => {
        //show alert....
        const alert = this.alertCtrl.create({
          title: 'Your Data is off',
          message : 'Turn on data or wifi in setting',
          buttons: [
            {
              text: 'Ok',
              handler: (data: any) => {
               console.log('data');
             }}
          ],
          enableBackdropDismiss: false
        });
        alert.present();
      });
 
       // watch network for a connection
      let connectSubscription = this.network.onConnect().subscribe(() => {
           
          // We just got a connection but we need to wait briefly
           // before we determine the connection type. Might need to wait.
          //prior to doing any api requests as well.
          if (this.network.type === 'wifi') {
             console.log('data');
          }
      });
   }

Он работает правильно, но проблема в том, что, если я оповещение открыто, и у нас есть предупреждение о закрытии после нажатия кнопки ОК.теперь я должен нажать любую другую ссылку, теперь сеть отключена, у нас есть push-страница, только если интернет включен, скажите мне, кто-нибудь, как управлять этим сценарием?

1 Ответ

0 голосов
/ 21 февраля 2019

Таким образом, как обычно вы хотите сделать это в приложении с большим количеством страниц:

  • создайте провайдера «базового» уровня - глобального единственного провайдера, который должна импортировать каждая страница.
  • у такого провайдера у вас есть общедоступная переменная "appIsOnline".
  • такая переменная обновляется программно на основе подписки, что у вас есть
  • , на каждой странице реализована защита ionViewCanEnter, которая позволяет толькостраница для входа в стек, если var основного провайдера сообщает, что приложение находится в сети.

Ваш провайдер должен выглядеть примерно так:

import { Injectable, AlertController } from '@angular/core';
import { Network } from "@ionic-native/network";

@Injectable()
export class FoundationProvider {

    public appIsOnline: boolean;

    constructor(
        private network: Network,
        private alertCtrl: AlertController
    ) {
        this.appIsOnline = true;
        this.listenConnection();
    }

    listenConnection() {
        // watch network for a disconnection if user is offline.......
        let disconnectSubscription = this.network.onDisconnect().subscribe(() => {
            this.appIsOnline = false;
            //show alert....
            const alert = this.alertCtrl.create({
                title: 'Your Data is off',
                message: 'Turn on data or wifi in setting',
                buttons: [
                    {
                        text: 'Ok',
                        handler: (data: any) => {
                            console.log('data');
                        }
                    }
                ],
                enableBackdropDismiss: false
            });
            alert.present();
        });

        // watch network for a connection
        let connectSubscription = this.network.onConnect().subscribe(() => {
            this.appIsOnline = true;
            // We just got a connection but we need to wait briefly
            // before we determine the connection type. Might need to wait.
            //prior to doing any api requests as well.
            if (this.network.type === 'wifi') {
                console.log('data');
            }
        });
    }

}

Тогда каждая страница должна импортировать этопровайдера, вставьте его в конструктор и добавьте хук на страницу:

ionViewCanEnter(): boolean {
   if(this.foundationProvider.appisOnline) {
      return true;
   }   
   return false;
}

В качестве альтернативы, в зависимости от того, как именно структурировано ваше приложение, вы можете «охранять» .push, .setRoot и т. д. методы, которые вы используете, чтобы перейти кстр.Но вы должны поделиться большим количеством своего кода, чтобы дать лучшее предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...