Это решение отлично работает на угловых 5+. для углового 6 я этого не делал.
Я сделал это для огромного проекта CMS, и я вставил компоненты на нескольких страницах и даже 2 одинаковых угловых модуля на одной странице. Вы можете использовать один угловой проект.
на вашем сайте, пишите теги компонентов.
Вам необходимо создать другой модуль (например, mainHelper) для экспорта каждого выбранного углового тега.
import {NgModule, ApplicationRef, ComponentFactoryResolver} from '@angular/core';
import {FirstModule} from 'YOUR MODULE PATH';
import {FirstComponent} from 'YOU COMPONENT PATH';
import {SecondModule} from 'YOUR MODULE PATH';
import {SecondComponent} from 'YOU COMPONENT PATH';
@NgModule({
imports: [
FirstModule,
SecondModule
],
})
export class MainHelper {
constructor(private resolver: ComponentFactoryResolver) {
}
components = [
FirstComponent,
SecondComponent
];
ngDoBootstrap(ref: ApplicationRef) {
this.components.forEach((component) => {
const factory = this.resolver.resolveComponentFactory(component);
const elements = document.getElementsByTagName(factory.selector); //get angular tags on your main website
if (elements.length > 0) {
if (elements.length > 1) {
const selector = factory.selector;
for (let i = 0; i < elements.length; i++) {
elements[i].id = selector + '-' + i;
(<any>factory).factory.selector = '#' + elements[i].id;
ref.bootstrap((<any>factory).factory);
// elements[i].id = '';
}
(<any>factory).factory.selector = selector;
} else {
ref.bootstrap(component);
}
}
});
}
}
в вашем main.ts, вы можете импортировать модуль MainHelper и загрузить MainHelper.
и ваш FirstModule будет выглядеть примерно так:
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {BrowserModule} from '@angular/platform-browser';
import {FirstComponent} from './first.component';
import {AnotherComponent} from './another/another.component';
@NgModule({
imports: [
CommonModule,
BrowserModule,
],
providers: [
SampleService // you need provide your services for all the modules
],
declarations: [
FirstComponent,
AnotherComponent,
],
bootstrap: [FirstComponent] // important
})
export class ECommerceModule {
}
Надеюсь, это поможет вам.