Чтобы использовать динамический контент внутри другого компонента, можно воспользоваться компонентом-обёрткой к таблице, который будет, в качестве графы "динамические элементы", вставлять пришедший код, посредством
ng-container.
Пример вашей пользовательской таблицы, которая обернёт стандартную таблицу:
<table>
<tr>
<td>
Содержимое div, переданное компонентом, который воспользуется обёрткой:
<ng-content select="div"></ng-content>
</td>
<td>
Содержимое целого компонента, переданное компонентом, который воспользуется обёрткой:
<ng-content select="app-action-buttons"></ng-content>
</td>
</tr>
</table>
Использовать так:
Вставляем нашу обёртку-таблицу
<app-user-table>
<div> Это наш первый столбец </div>
А это целый компонент, который мы вставим во второй столбец:
<app-action-buttons> </app-action-buttons>
</app-user-table>
Сортировка, Фильтрация и Пагинация есть в официальном дизайне Angular --
Material.