0.0.1 • Published 3 years ago

@jezmaghuyop/ngx-lazy-element v0.0.1

Weekly downloads
-
License
-
Repository
github
Last release
3 years ago

Tests CI

Disclaimer

this is just an updated version that I personally modified for my project needs. I've updated the library to use Angular 12, the original package is here ngx-element by Michael Krog go check it out.

NgxElement

NgxElement enables to lazy load Angular components in non-angular applications. The library will register a custom element to which you can pass an attribute to specify what component you want to load.

It's a great way to use Angular in your CMS platform in an efficient manner.

Install Angular Elements

This library depends on Angular Elements. You can install it by running:

$ ng add @angular/elements

Installing the library

$ npm install @jezmaghuyop/ngx-lazy-element

Usage

1) Configure the Module containing the lazy loaded component

First of all, expose the Angular Component that should be loaded via a customElementComponent property.

...
@NgModule({
  declarations: [TalkComponent],
  ...
  exports: [TalkComponent],
  entryComponents: [TalkComponent]
})
export class TalkModule {
  customElementComponent: Type<any> = TalkComponent;
  ...
}

2) Define the lazy component map in your AppModule

Just like with the Angular Router, define the map of component selector and lazy module.

const lazyConfig = {
  definitions: [
    {
      selector: 'talk',
      loadChildren: () => import('./talk/talk.module').then(m => m.TalkModule)
    }
  ],
  prefix: 'ws'
];


@NgModule({
  ...,
  imports: [
    ...,
    NgxElementModule.forRoot(lazyConfig)
  ],
  ...
})
export class AppModule {
  ...
  ngDoBootstrap() {}
}

3) Use the lazy loaded component

You can load your Angular component by adding an <ngx-element> tag to the DOM in your non-angular application like follows:

<ws-talk
  title="Angular Elements"
  description="How to write Angular and get Web Components"
  speaker="Bruno">
</ws-talk>

4) Listen to events

You can listen to events emitted by Angular components.

Add an @Output event to your component:

...
@Output() tagClick: EventEmitter<string> = new EventEmitter();
...

Then add an event listener to the tagClick event on the appropiate <ngx-element> element:

const talks = document.querySelector('ws-talk');
talks.addEventListener('tagClick', event => {
  const emittedValue = event.detail;
  ...
});