我正在开发使用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