检测到连接错误更改时发生ViewDestroyedError

时间:2018-07-24 13:20:17

标签: ionic-framework ionic3 bluetooth-lowenergy

我正在开发使用Ionic BLE component的Ionic应用程序。

在此应用程序中,与设备的连接断开时,无论该事件发生在哪个活动页面上,我都需要显示一个弹出窗口。 我发现,当连接丢失时,将执行ble.connect()的错误处理程序,因此我已经能够使用以下代码显示弹出窗口:

}, errConnect => {
                  console.log('connessione fallita' + JSON.stringify(errConnect));

                  if (this.bleStatus != this.enumBleStatus.turningOff && this.bleStatus != this.enumBleStatus.connect) {
                    this.retrySetup();
                  }

                  if (this.bleStatus == this.enumBleStatus.connect) {

                    console.log("ble disconnected -> active page")

                    this.modalPopUpProvider.showInformation(this.translate.instant('modalpopup.bledisconnected'),
                      this.translate.instant('modalpopup.bledisconnectedmessage'),
                      this.translate.instant('modalpopup.confirm'));

                    console.log("BLE STATUS CONNECTION FAILED:");
                    console.log(this.bleStatus);
                    this.bleStatus = this.enumBleStatus.disconnect;
                    console.log(this.bleStatus);

                    this.ChangeDetectorRef.detectChanges();

                    sessionStorage.setItem('bleStatus', JSON.stringify(this.bleStatus));

                    sessionStorage.removeItem('deviceBleFound');


                  }

我所面临的问题发生在用户退出ble页面,保持连接活动并返回到ble页面时;在这种情况下,如果连接断开,我将无法更新UI,因为this.ChangeDetectorRef.detectChanges();会引发以下错误:

cordova.js:311 Uncaught Error: ViewDestroyedError: Attempt to use a destroyed view: detectChanges
    at viewDestroyedError (vendor.js:10216)
    at Object.debugUpdateDirectives [as updateDirectives] (vendor.js:15068)
    at checkAndUpdateView (vendor.js:14218)
    at callWithDebugContext (vendor.js:15472)
    at Object.debugCheckAndUpdateView [as checkAndUpdateView] (vendor.js:15009)
    at ViewRef_.detectChanges (vendor.js:11993)
    at ConnectBlePage.webpackJsonp.933.ConnectBlePage.setBleStatus (2.js:1667)
    at SafeSubscriber._error (2.js:1618)
    at SafeSubscriber.__tryOrUnsub (vendor.js:38485)
    at SafeSubscriber.error (vendor.js:38444)

此错误的原因是this.ChangeDetectorRef试图检测旧页上已被破坏的更改。

由于我需要显示其他信息,我试图弄清楚如何刷新UI。

有人知道如何避免 ChangeDetectorRef 使用旧视图或获取对新ChangeDetectorRef的引用并在其上调用detectChanges()方法吗?

如果我打印ChangeDetectorRef对象,它的字段destroyed设置为True

0 个答案:

没有答案