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

标签 angular rxjs ionic2 reactivex

我正在开发一个 Ionic2 应用程序,使用 cordova-plugin-network-information,我正在从我的 app.ts 订阅连接和断开事件,并希望能够传递对我的 NavController 和加载组件的引用到 subscribe() 回调中,因此无论何时触发断开连接事件,我都可以在 UI 顶部向用户显示加载叠加层。我看到在回调中,对“this”对象的引用更改为一个名为“SafeSubscriber”的对象,我认为这是它的 Observer 对象的 rxjs 类型类,我在这里遇到的问题是我无法获得那些app.ts 中可用的实例到回调中的此代码,使用 Chrome DevTools 我也无法找到离开此上下文的方式以访问 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 [粗箭头] 函数中,这是否正确?)

enter image description here

我尝试在订阅之前设置一个“那个”对象,这样变量“这个”就不会干扰回调“这个”范围,它在这种情况下不起作用,因为“那个”在 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);  
      });
    }

关于angular - 如何将对象传递给 rxjs subscribe() 回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37107041/

相关文章:

angular - 有没有一种简单的方法来覆盖基本指令?

angular - 等待在异步路由守卫中填充 ngrx 状态

angular - 如何使用ionic2改变<ion-card>的颜色

android - 字体未在 ionic 3 应用程序的 android 设备上应用

javascript - Angular 2 ngModel 变异指令

javascript - MQTT.js - 如何处理连接错误?

angular - 如何使用 Jasmine 对 Promise catch 进行单元测试

javascript - rxjs:使用流两次引用已完成上游的可观察对象

javascript - Rxjs 递归与 bindcallback

angular - 无法确定 X.ts 中 X 类的模块!将 X 添加到 NgModule 以修复它在 ionic2 中的错误