的檢測另一種方式DOM改變是通過MutationObserver實例化類的構造函數,你定義什麼做的改變,然後在ngAfterViewInit()
觀察它時。你運行你想要的計算函數,然後你可以停止觀察,這樣的樂趣如果進一步發生變化,警告將不會繼續。
import { Component, AfterViewInit } from '@angular/core';
@Component({
selector: 'app-test',
template: `<div #element></div>`
})
export class TestComponent implements AfterViewInit {
@ContentChild('element') element : ElementRef;
this.observer: MutationObserver;
constructor() {
this.observer = new MutationObserver(mutations => {
this.testFunction();
});
}
ngAfterViewInit() {
this.observer.observe(this.element.nativeElement, { attributes: true, childList: true, characterData: true });
}
testFunction() {
this.observer.disconnect(); // We no longer want to observe
alert('Test!');
}
}
您需要一種方式來觸發一個函數,一旦DOM元素已經呈現? –
嗯,在物品被渲染後,我需要計算一些dom屬性,如果他們符合條件 - 發射一個函數。在我的應用程序的另一個地方,有超時是在啓動時,但它是暫時的。如果我刪除這兩個超時,測試工作。 –
好的。你的'setTimout'的意圖是在元素呈現後觸發一個函數?另一種方法是否可以,爲了避免'setTimeout'問題?檢查是否呈現的另一種方法。 –