O NGXELEMENT permite componentes angulares de carga preguiçosos em aplicações não angulares. A biblioteca registrará um elemento personalizado no qual você pode passar um atributo para especificar qual componente você deseja carregar.
É uma ótima maneira de usar o Angular em sua plataforma CMS de maneira eficiente.
Esta biblioteca depende de elementos angulares. Você pode instalá -lo em execução:
$ ng add @angular/elements
$ npm install ngx-element --save
Primeiro de tudo, exponha o componente angular que deve ser carregado por meio de uma propriedade CustomElementComponent.
...
@NgModule({
declarations: [TalkComponent],
...
exports: [TalkComponent],
entryComponents: [TalkComponent]
})
export class TalkModule {
customElementComponent: Type<any> = TalkComponent;
...
}
Assim como no roteador angular, defina o mapa do seletor de componentes e do módulo preguiçoso.
const lazyConfig = [
{
selector: 'talk',
loadChildren: () => import('./talk/talk.module').then(m => m.TalkModule)
}
];
@NgModule({
...,
imports: [
...,
NgxElementModule.forRoot(lazyConfig)
],
...
})
export class AppModule {
...
ngDoBootstrap() {}
}
Você pode carregar seu componente angular adicionando uma tag <ngx-element> ao DOM em seu aplicativo não angular, como segue:
<ngx-element
selector="talk"
data-title="Angular Elements"
data-description="How to write Angular and get Web Components"
data-speaker="Bruno">
</ngx-element>
Você pode ouvir eventos emitidos por componentes angulares.
Adicione um evento @Output ao seu componente:
...
@Output() tagClick: EventEmitter<string> = new EventEmitter();
...
Em seguida, adicione um ouvinte de evento ao evento tagClick no elemento apropado <ngx-element> :
const talks = document.querySelector('ngx-element[selector="talk"]');
talks.addEventListener('tagClick', event => {
const emittedValue = event.detail;
...
});
Obrigado a Juri Strumpflohner e NGX-LAZY-EL!