2017-04-04 26 views
2

我有一個角2(離子型2)應用程序,我躲使用*ngIf如果網絡脫機一些元素,並顯示另一個按鈕,「重試」 DOM已準備就緒。如何檢測時後* ngIf條件設置爲true

當我點擊重試按鈕,如果網絡回來,我然後想要重新顯示由*ngIf隱藏的元素。此外,我還需要通過@ViewChild(例如,Ionic 2滑塊獲取它的當前索引)來引用其中的一些。我的問題是,當我嘗試在相同的函數調用中獲取對它們的引用時,這些元素並不是全部定義的,這些函數將綁定到*ngIf的屬性重新設置爲true。

我已經嘗試過從setTimeout中調用,但這似乎不是很安全 - 有些DOM元素回來了,但並非全部。

有沒有辦法知道DOM準備好了所有被*ngIf隱藏的元素,還是我需要找到其他一些方法來做到這一點(不使用*ngIf,所以元素並沒有實際移除)。

在此先感謝您的任何建議!

回答

0

我認爲你正在尋找了解this

enter image description here

我覺得ngAfterViewInit()將幫助您完成此,

ngAfterViewInit()響應角初始化該組件的 觀點和後兒童的意見。

在第一個ngAfterContentChecked()後調用一次。

僅限組件的鉤子。

2

您應該能夠通過查看通過NgZone發出的onStable事件做你想做什麼:

分量模板:

<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 
    }); 
} 

下面是一個顯示它正在工作的plunk:https://plnkr.co/edit/jKSaEI0XUcJQehZnJTxB

+0

感謝您的建議,並且似乎在該示例中起作用。我將它添加到我的項目中,並且它確實觸發了,但是當我嘗試在此事件中嘗試訪問它時,我的一個離子選擇仍然不可用。我從那以後只是在這種情況下切換了可見性,因爲這並不能去掉任何東西。 – peterc