我正在开发一个 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 [粗箭头] 函数中,这是否正确?)
我尝试在订阅之前设置一个“那个”对象,这样变量“这个”就不会干扰回调“这个”范围,它在这种情况下不起作用,因为“那个”在 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/