2016-11-29 3 views
2

は私のhtmlです:Angular2 Selectioningその上にngIfを持つ要素

<div id="foo" (mouseover)="blah()" *ngIf="isDisplayed"></div> 

そして、私のJS:

isDisplayed: boolean = false 
blah() { 
    this.isDisplayed = true 
    console.log(document.getElementById('foo')) 
} 

はしかし、私にconsole.logは印刷ヌルを行います。 console.logの周りにsetTimeoutを追加すると動作しますが、それはハッキーであり、いくつかのイベントが再生されるときに混乱することになります。つまり、テンプレートのngIfが更新される前にgetElementByIdが実行されるということです。 console.logを実行しているときにテンプレートが更新されることを確認するにはどうすればよいですか?

答えて

5

変更検出を明示的に呼び出すと、AngularはすぐにDOMを更新します。

constructor(private cdRef:ChangeDetectorRef) {} 

isDisplayed: boolean = false 
blah() { 
    this.isDisplayed = true; 
    this.cdRef.detectChanges(); 
    console.log(document.getElementById('foo')); 
} 
+0

乾杯!私は実際にそれについて考えましたが、何らかの理由で私はそれを試していませんでした – Scipion

関連する問題