Я думаю, что лучшим подходом будет просто иметь переключатели для каждого из этих компонентов, чтобы их можно было показать или скрыть с помощью ng-if.
Я не думаю, что это хорошая идея делать это с именованными представлениями, потому что это становится сложным. Если вы действительно хотите изучить этот вариант, взгляните на приведенный ниже код, чтобы понять, как он может работать. С этим подходом усложняется то, что у вас должно быть состояние для каждой комбинации компонентов, которые могут быть показаны одновременно. Я приведу 1 пример состояния, которое показывает все 3:
parent.component.html
<div ui-view="content1"></div>
<div ui-view="content2"></div>
<div ui-view="content3"></div>
routes.js
const homeIndex = {
name: "home",
url: "/home",
component: "homeComponent",
lazyLoad: ($transition$) => {
const $ocLazyLoad = $transition$.injector().get("$ocLazyLoad");
return import("./index/index.module")
.then(mod => $ocLazyLoad.load(mod.HOME_INDEX_MODULE))
.catch(err => {
throw new Error("Ooops, something went wrong, " + err);
});
}
};
// Example: show all 3 at once
const homeAbout= {
name: "home.about",
views: {
'content1@home': {
component: 'homeAboutComponent',
lazyLoad: ($transition$) => {
const $ocLazyLoad = $transition$.injector().get("$ocLazyLoad");
return import("./about/about.module")
.then(mod => $ocLazyLoad.load(mod.HOME_ABOUT_MODULE))
.catch(err => {
throw new Error("Ooops, something went wrong, " + err);
});
}
},
'content2@home': {
component: 'homeNewsComponent',
// lazy load
},
'content3@home': {
component: 'homeContactsComponent',
// lazy load
},
}
};