Если правильно понял, то можно, допустим, в shared создать модуль layout, в котором будет директория wrapper (обертки) ну и все остальные части каркаса (header, sidebar, footer и т.д.). И вот во wrapper будут располагаться собранные каркасы под определенные роуты. К примеру, будет FirstLayoutComponent и SecondLayoutComponent. С каркасами вроде:
FirstLayoutComponent<header>...</header>
<main>
<router-outlet></main>
<footer>...</footer>
SecondLayoutComponent<header>...</header>
<main>
<sidebar>...</sidebar>
<router-outlet>
</main>
<footer>...</footer>
И в роутинге делаем прослойку:
const routes: Routes = [
{
path: 'first', component: FirstLayoutComponent, children: [
{ path: 'test1', component: Test1Component }
]
},
{
path: 'secod'm component: SecondLayoutComponent, children: [
{ path: 'test2', component: Test2Component }
]
}
];
И тогда все компоненты которые будут являться дочерними для компонента FirstLayoutComponent будут иметь первую структуру, а все дочерние компоненты SecondLayoutComponent будут иметь вторую структуру, соответственно. Обертки естественно будут Ваши. Можно сделать хоть полностью 2 разных дизайна по разных адресам