2017-04-04 11 views
2

ネットワークがオフラインの場合は*ngIfを使用していくつかの要素を非表示にし、別のボタンを表示すると "再試行" 。* ngIf条件がtrueに設定された後にDOMの準備ができたら検出するには

リトライボタンをクリックすると、ネットワークが戻ったら、*ngIfで隠されている要素を再表示します。また、@ViewChild(たとえば、Ionic 2スライダを使用して現在のインデックスを取得する)でそれらの一部を参照する必要があります。私の問題は、これらの要素が、同じファンクションコールで参照を取得しようとするときに定義されていないということです。*ngIfにバインドされたプロパティをtrueに戻します。

私はsetTimeoutの中から呼び出すことを試みましたが、これは非常に安全ではないようです - いくつかのDOM要素は戻っていますが、すべてではありません。

*ngIfで隠されていたすべての要素がDOMに準備されているか、または*ngIfを使用していないので、要素が実際には削除されないようにする必要がありますか? )。

ご協力いただきありがとうございます。角度は、コンポーネントの ビューを初期化した後、私はngAfterViewInit()はこれであなたを助けると思う

enter image description here

私はあなたが thisを理解するために探していると思う

答えて

0

ngAfterViewInit()応答子供の眺め。

最初のngAfterContentChecked()の後に1回呼び出されます。

コンポーネント専用のフックです。

あなたがNgZoneを経由して放出されるonStableイベントを見て、あなたがやりたいことができるはず
2

:コンポーネントテンプレートで

<button (click)="showFoo = !showFoo">toggle</button> 
<div *ngIf="showFoo" #foo >foo</div> 

あなたのコンポーネントクラスで

@ViewChild('foo') foo: ElementRef; 
showFoo = false; 

constructor(private zone: NgZone) { 
    zone.onStable.subscribe(() => { 
    console.log(this.foo); 
    // this will log either undefined or an ElementRef as you toggle 
    }); 
} 

ここには、それが働いていることが示されている:https://plnkr.co/edit/jKSaEI0XUcJQehZnJTxB

+0

その提案をありがとう、確かに例で動作するようです。私はそれを私のプロジェクトに追加しましたが、それは起こりましたが、私のイオン選択の1つは、このイベントでそれにアクセスしようとしたときにまだ利用できませんでした。私は以来、このケースでは可視性をトグルするだけになっています。これはdomから何も削除しないためです。 – peterc

関連する問題