Вы были почти там.
Проблема в том, что вы пытаетесь вставить ссылки ViewChild в ваш массив в constructor()
до того, как они будут созданы на странице, чтобы селекторы могли 'пока ничего не выбирайте.
Вместо этого сделайте это в ngOnInit()
хуке жизненного цикла , как вы это делали вручную, что сработало.
Так что-то вроде:
// Illustration only, you can delete empty constructors
constructor () {}
ngOnInit() {
this.data.push({ tabLabel: 'newlabel', template: this.orderDetails });
}
Как общее практическое правило: constructor()
в Angular используется в основном только для инициализации переменных в известных (статических) значениях или для вставки ссылок на классы (например, Services).Вы не можете прикоснуться к DOM в конструкторе, потому что шаблон еще не отображался при запуске.Для этого и нужны ловушки жизненного цикла.
В качестве примечания: вместо того, чтобы вручную поддерживать этот массив объектов, возможно, было бы полезно @ViewChildren
.