当用户离线并重新回到在线状态时,如何使我的离子刷新器正常工作?

时间:2019-06-04 11:24:47

标签: angular typescript ionic-framework

当我拔出dsl电缆并再次插入时,我的离子清洁器无法正常工作,为什么?

我想在Internet脱机时停止它,而在Internet开启时用户可以这样做。

这是代码:

doRefresh(refresher) {
    if (this.isOnline) {
      this.refreshData();
      this.getAssignedWarrents()
        .then(() => {
          console.log('Refresher completed.');
          refresher.complete();
        });
       }else {
    refresher.complete();
    }
  }

2 个答案:

答案 0 :(得分:0)

一种快速而肮脏的解决方案是直接使用navigator.onLine属性而不是isOnline属性:

doRefresh(refresher) {
    if (navigator.onLine) {
        this.refreshData();
        this.getAssignedWarrents().then(
            () => {
                console.log('Refresher completed.');
                refresher.complete();
            }
        );
    } else {
        refresher.complete();
    }
}

您当前的代码无效,因为您从不更新isOnline属性。因此,复习人员永远不会“知道”互联网连接脱机或联机。

但是,更好的方法是直接禁用视图中的离子刷新器。

如何实现此目的的示例。

<ion-refresher 
    [disabled]="hasNoInternetConnection()" 
    (ionRefresh)="doRefresh($event)">
</ion-refresher>

控制器中的下一个:

hasNoInternetConnection(): boolean {
    return !navigator.onLine;
}

doRefresh(refresher) {
    // Your usual refresh. Note how we do not need to check if we are online here.
    this.refreshData();
    this.getAssignedWarrents().then(
        () => {
            console.log('Refresher completed.');
            refresher.complete();
        }
    );
}

这种方法更好,因为我们让Ionic处理禁用刷新器,而不是自己检查刷新器。

如果navigator.onLine对您而言无法正常工作,您还可以使用Ionic小组提供的Network插件。

答案 1 :(得分:0)

如果我们谈论离子环境,也许最好的方法是像这样为Network注册处理程序:

  constructor(private network: Network) {}
  ...
  if (this.platform.is('cordova')) {
    this.network.onDisconnect().subscribe(
      async () => {
        await this.appOffline();
      },
      error => this.log.error('network.onDisconnect subscribe error: %j', error)
    );
    this.network.onConnect().subscribe(
      async () => {
        await this.appOnline();
      },
      error => this.log.error('network.onConnect subscribe error: %j', error)
    );
...