Я думаю, что причина в том, что эти элементы отсутствуют, когда вы запрашиваете их с помощью этой строки:
console.log(this.element.nativeElement.getElementsByClassName('fab'),
this.element.nativeElement.getElementsByClassName('fab')[0]);
Существует простой пример, показывающий, где может быть проблема:
console.log(document.getElementsByClassName('fab'), document.getElementsByClassName('fab')[0]);
const el1 = document.createElement('div');
el1.setAttribute('class', 'fab');
const el2 = document.createElement('div');
el2.setAttribute('class', 'fab');
setTimeout(() => {
this.abc.nativeElement.appendChild(el1);
this.abc.nativeElement.appendChild(el2);
}, 2000);
Элементы добавляются через 2 секунды, и журнал консоли такой же, как у вас, но когда вы нажимаете HTMLCollection
, он оценивает и показывает эти элементы - конечно, если вы щелкнете через 2 секунды (когда элементы присутствуют).
Если эти элементы действительно присутствуют, когда вы запрашиваете их, журнал консоли должен выглядеть примерно так:
HTMLCollection(2) [div.fab, div.fab]
Также обратите внимание, что этот маленький i в консоли Google Chrome сообщаетВам это значение оценивается только сейчас - в тот момент, когда вы нажимаете на него.