Если вы хотите объявить компоненты в одном модуле и использовать их в другом модуле, вам нужно экспортировать их, чтобы иметь возможность импортировать модуль в другой модуль.
В вашем app.module.ts объявите, а также экспортируйте их, чтобы ваш другой модуль мог понять, что они из другого модуля.
@NgModule({
imports: [
BrowserModule
],
declarations: [
AppComponent,
ScNavbarComponent
],
exports: [
ScNavbarComponent
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
}
В другом модуле вы теперь можете импортировать ScNavbarComponent .
Если у вас нет других модулей, вы можете просто добавить ScNavbarComponent в раздел entryComponents вашего app.module.ts . Если его там уже нет, вы можете просто добавить его, как показано ниже.
entryComponents: [
ScNavbarComponent
]
EDIT:
Что-то, что вы могли бы подумать сделать (что могло бы лучше соответствовать вашей цели), это использовать ComponenFactoryResolver, который позволяет динамически отображать угловые компоненты. Ниже приведен пример того, как это может работать:
В вашем шаблоне вы можете использовать шаблон ref вроде:
<div #navbar></div>
Чтобы назначить компонент этой ссылке, в своем компоненте вы должны ссылаться на это с помощью аннотации ViewChild:
@ViewChild('navbar', { ViewContainerRef }) navBar: ViewContainerRef;
Далее вам нужно добавить сам преобразователь в ваш конструктор:
constructor(private resolver: ComponentFactoryResolver) {}
Резолвер теперь готов к использованию и должен использоваться в ловушке жизненного цикла ngAfterContentInit , как описано ниже (убедитесь, что ваш компонент реализует ngAfterContentInit):
ngAfterContentInit() {
const navBarFactory = this.resolver.resolveComponentFactory(ScNavbarComponent); // make sure to import your component
const component = this.navBar.createComponent(navBarFactory);
}
После реализации приведенного выше кода ваш ScNavbarComponent должен динамически проецироваться внутри вашего templateRef.
Надеюсь, это поможет!