Итак, причина, по которой вкладки не загружаются, заключается в коде в функции ngViewAfterInit()
компонента пользовательских вкладок. Это было инициализировано, но это все. Таким образом, this.tabGroup
никогда не обновляется с текущими вкладками и, следовательно, не отражается в пользовательском интерфейсе. Поэтому я добавил подписку, чтобы следить за изменением вкладок и использовать ту же логику (я не уверен, что она на 100% правильная, но она выполняет свою работу).
public ngAfterViewInit() {
const matTabsFromQueryList = this.tabs.map((tab) => tab.matTab);
const list = new QueryList<MatTab>();
list.reset([matTabsFromQueryList]);
this.tabGroup._tabs = list;
this.tabGroup.ngAfterContentInit();
// watches for when the tabs change
this.tabs.changes.subscribe(value => {
const matTabsFromQueryList = value.map((tab) => tab.matTab);
const list = new QueryList<MatTab>();
list.reset([matTabsFromQueryList]);
this.tabGroup._tabs = list;
this.tabGroup.ngAfterContentInit();
});
}
Это (опять же) не самое элегантное решение, потому что вам нужно взаимодействовать с вкладками перед их загрузкой, но оно сохраняет контекст (как показано в поле ввода). Вкладки не будут обновляться без выбора другой вкладки, поэтому мне пришлось найти хакерское решение, в котором я переключаю this.selected.value на -1, а затем переключаюсь обратно на правильную вкладку, так что это немного некрасиво, но, по крайней мере, работает.
stackblitz