Я знаю, что прошло много времени с тех пор, как вы опубликовали этот вопрос, но у нас возникла та же проблема, и я просто решил ее с помощью разных модулей.
У меня есть модуль (customer-components.module.ts), который решает, какие клиентские компоненты включены в зависимости от условий.
const customerComponents = [CustomerModule];
const defaultComponents = [DefaultModule];
// I just realised functions are not working in aot
// not the best way if there are lots of customers which is the case for us.
// i will see if i can find a nicer way to decide on the components. but the mechanisim works
const exports = env.customer === 'customer1' ? customerComponents : defaultComponents;
@NgModule({
imports: [
CustomerModule,
DefaultModule,
CommonModule
],
declarations: [],
exports: getExports()
})
export class CustomerComponentsModule {}
Все специфичные для клиента компоненты объединены в одном клиенте.модуль.В этом примере клиентский модуль может только объявить и экспортировать компонент navigation.component.Модуль по умолчанию объявляет и экспортирует те же компоненты.Важным является тот факт, что селекторы в каждом компоненте идентичны.Это означает, что в обоих модулях: клиентском модуле и модуле по умолчанию там компонент навигации имеет одинаковый селектор (app-navigation).
Теперь я могу импортировать клиентский модуль везде, где я хочу, например, вприложение-модуль.и использовать в app.component.html, а среда указывает, какой компонент навигации экспортируется и используется в app.component.