В общем случае, динамические компоненты реализуются при помощи роутера. В вашем случае, кажды таб - это какой-то уникальный путь. Список табов подгружается через API и на основе подгруженных данных формируется массив вроде
[
{ name: 'Chart 1', routerLink: ['/chart-1']},
{ name: 'Chart 2 ', routerLink: ['/chart-2']},
]
Дальше на основе этого массива строится компонент с табами. А сами компоненты табов будут подгружаться при помощи роутера при переходе на таб.