Как узнать, когда данный элемент был подключен к DOM - PullRequest
0 голосов
/ 07 июня 2019

Основной вопрос

Предположим, у вас есть элемент DOM e, который отключен от тока document, то есть

document.compareDocumentPosition(e) & Node.DOCUMENT_POSITION_DISCONNECTED

равен true.

Как подключиться к событию, которое срабатывает в данный момент (или на следующем тике, это не имеет значения), этот узел подключается, то есть

document.compareDocumentPosition(e) & Node.DOCUMENT_POSITION_DISCONNECTED

начинает возвращать false?

Более высокий контекст

У меня есть угловой компонент, чей ngAfterViewInit будет вычислять некоторые значения с учетом текущего стиля элемента (фактические размеры, отступы, поля и т. Д.).

Но angular может звонить ngAfterViewInit после того, как его потомки созданы, но не обязательно связаны с его родителем.Элемент, отключенный от документа, по существу не имеет стиля, поэтому каждое измерение - разумно - ноль.

Я хочу отложить это вычисление до тех пор, пока этот элемент окончательно не будет соединен со всем документом, не будут применены правила CSS, HTML /CSS перекомпонован и стиль элемента устанавливается.

Ошибка MutationObserver

Я пытался использовать MutationObserver следующим образом:

    this._ngZone.runOutsideAngular(() => {
        new MutationObserver(mutations => {
            console.log('got mutations', mutations);
            mutations.forEach(mutation => {
                mutation.addedNodes.forEach(node => {
                    if (node === this.element) {
                        console.log('GOT CONNECTED');
                    }
                })
            });
        }).observe(document, { childList: true });
    });

Даже первые «полученные мутации» не появились в консоли.Может быть, я что-то не такЯ новичок в этом MutationObserver вещь.

...