私はcordio-plugin-network-informationを使用してIonic2 Appを開発しています。私はapp.tsからconnectイベントとdisconnectイベントを購読しており、NavControllerとLoadingコンポーネントへの参照をsubscribe()コールバックは、切断のイベントが発生するたびにUI上部にLoadingオーバーレイを表示することができます。コールバックでは、 "this"オブジェクトへの参照が "SafeSubscriber"というオブジェクトに変更されていることがわかります。これはObserverオブジェクトのrxjs型クラスであると思いますが、ここで問題になるのは、 app.tsで利用可能なインスタンスをコールバック内のこのコードにChrome DevToolsを使用するAppオブジェクト自体にアクセスするために、このコンテキストから私の道を見つけることができませんでした。ここでrxjs subscribe()コールバック関数にオブジェクトを渡す方法は?
は私のコードです:
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...
});
}
これはクロームデベロッパーツール内の「この」オブジェクト(これは、ラムダの内側に元のコンテキストを維持することになっている[脂肪矢印]機能を照会するときに私が得るものですこの正しい?)私は、オブジェクト変数は「この」コールバックで「この」スコープを干渉しないように、サブスクリプションを行う前に、それがなかった「ということ」ではない設定を試してみました
このシナリオでは、 'それ' hは、切断イベントが発生したときに、subscribe()(let:any = this;)がコールバックの内部で未定義になる直前に宣言されました。
これはUIを直接変更するコードを置くのに最適な場所ではないが、私はここに必要なのは接続がないときにこのオーバーレイを設定することで動作するグローバルなイベントハンドラなので、ユーザーはアプリ内の特定のページを閲覧しています。
私はこれには非常に簡単でエレガントな解決策があると思いますが、私はそれを見つけることができないようです。 subscribe()関数にパラメータを渡す方法はありますか?私が必要とする参照を持つオブジェクトのいくつかの並べ替え?
ありがとうございます。
間違いは別の場所です。 'this.nav ...'または 'this.loading'はこの場所でうまく動作します。 'this.loading'は' subscribe(...) 'コールバックが呼び出されたときに実際に値を持っていますか? –
両方のオブジェクトがコールバックの外部で利用可能です。アプリのライフタイムのどの時点でも実行されているようにラムダ関数の内部に問題があり、app.tsのスコープが長く消えてしまったと思います。私はこれについて完全に肯定的ではないが、クロム開発ツールでは環境はかなり孤立しているようだ。私のtsconfig.jsonはES5を使うように設定されていますが、それは問題でしょうか? –
スコープは常に利用可能です。私はそれ以上の情報なしでサポートを提供するのはかなり難しいと思う。理想的には、これを再現してデバッグできるPlunkerだ。 –