如何将对象传递给 rxjs subscribe() 回调函数?

Wil*_*ega 7 rxjs reactivex ionic2 angular

我正在开发一个 Ionic2 应用程序,使用 cordova-plugin-network-information,我从我的 app.ts 订阅连接和断开连接事件,并希望能够将对我的 NavController 的引用和加载组件传递到订阅中() 回调,因此每当断开连接事件触发时,我都可以在 UI 顶部向用户显示正在加载的叠加层。我看到在回调中对“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...
      });
    }
Run Code Online (Sandbox Code Playgroud)

这是我在 Chrome DevTools 中查询“this”对象时得到的结果(这应该将其原始上下文保留在 lambda [粗箭头] 函数中,这是正确的吗?)

在此输入图像描述

我尝试在订阅之前设置一个“that”对象,以便变量“this”不会干扰回调“this”范围,它在这种情况下不起作用,因为“that”是立即声明的当触发断开连接事件时,在 subscribe() (假设:any = this;)在回调内部未定义之前。

我知道这不是放置直接更改 UI 的代码的最佳位置,但我没有看到其他地方,因为我这里需要的是一个全局事件处理程序,只要没有检测到连接且用户没有连接,该处理程序就通过设置此覆盖来工作正在查看应用程序内的某些页面。

我认为应该有一个非常简单和优雅的解决方案,但我似乎无法找到它。有没有办法将参数传递给 subscribe() 函数?某种带有我需要的引用的对象?

提前致谢。

Toa*_*yen 1

我很确定简单的关闭应该可以解决问题。尝试这个:

ngOnInit()
    {
      // Nav Controller:
     var nav = <NavController>this.app.getComponent('nav');

      // Disconnect Detection
      let disconnectSubscription = Network.onDisconnect().subscribe(() =>
      {
          console.log('Disconnect Detected');          
          nav.present(true);  
      });
    }
Run Code Online (Sandbox Code Playgroud)