我正在使用cordova-plugin-network-information开发Ionic2应用程序,我正在从app.ts订阅connect和断开连接事件,并希望能够将对NavController和Loading组件的引用传递到订阅中()回调,因此无论何时发生断开连接事件,我都可以在用户界面的顶部为用户提供一个Loading叠加层。我看到在回调中,对“ this”对象的引用更改为一个名为“ SafeSubscriber”的对象,我认为这是其Observer对象的rxjs类型的类,这里的问题是我无法获取那些对象使用Chrome DevTools,在app.ts中可以在回调中找到此代码的实例,但我也无法通过此上下文找到访问App对象本身的方法。
这是我的代码:
ngOnInit()
{
// Nav Controller:
this.nav = <NavController>this.app.getComponent('nav');
// Disconnect Detection
let disconnectSubscription = Network.onDisconnect().subscribe(() =>
{
console.log('Disconnect Detected');
// Push Loading into nav stack here...!
// this.nav.present(this.loading); <- no this object...
});
}
这是我在Chrome DevTools中查询“ this”对象时得到的信息(应该将其原始上下文保留在lambda [fat arrow]函数中,这对吗?)
我尝试在进行订阅之前设置一个“ that”对象,以使变量“ this”不会干扰回调“ this”范围,在这种情况下它不起作用,因为立即声明了“ that”在断开连接事件被触发时,在回调内部未定义subscribe()(之前是:any = this;)之前。
我知道这不是放置直接更改UI的代码的最佳位置,但是我看不到其他位置,因为我需要的是全局事件处理程序,该事件处理程序通过在未检测到连接和用户的情况下设置此覆盖层来工作正在查看应用内的某些页面。
我认为应该有一个非常简单而优雅的解决方案,但是我似乎找不到它。有没有一种方法可以将参数传递给subscribe()函数?我需要某种带有引用的对象?
提前致谢。
我很确定简单的闭包应该可以解决问题。试试这个:
ngOnInit()
{
// Nav Controller:
var nav = <NavController>this.app.getComponent('nav');
// Disconnect Detection
let disconnectSubscription = Network.onDisconnect().subscribe(() =>
{
console.log('Disconnect Detected');
nav.present(true);
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句