This package has been deprecated

Author message:

use @ngxd/core with fully automatic bindings

ngx-component-outlet
TypeScript icon, indicating that this package has built-in type declarations

0.0.8 • Public • Published

ngx-component-outlet

Best way to quickly use Dynamic Components with Angular

npm npm License Conventional Commits CircleCI Travis

GitHub contributors GitHub PR Stats GitHub Issue Stats

GitHub stars npm Downloads

Example Usage

Use like NgComponentOutlet but with @Input/@Output auto bindings:

<!-- host component -->
<app-dynamic
    <!-- dynamic component -->
    [ngxComponentOutlet]="component"
    <!-- regular input -->
    [entity]="entity"
    <!-- regular output -->
    (action)="onAction($event)">
</app-dynamic>

Comparison

Feature NgxComponentOutlet ComponentFactoryResolver NgComponentOutlet
Friendliness ⭐⭐⭐ ⭐⭐
Dynamic Components
AOT support
Reactivity
Injector
NgModule
projectionNodes
Component Access
Lifecycle OnChanges ⭕️ manually
Binding @Input() ⭕️ manually
Binding @Output() ⭕️ manually
Activate Event ⭕️ manually
Deactivate Event ⭕️ manually

Demo

Heroes

List of heroes

Table And Form

Table of heroes with table schema form

Editable Demo

Stackblitz

Github

Getting started

Step 1: Install ngx-component-outlet:

NPM

npm install --save ngx-component-outlet

Yarn

yarn add ngx-component-outlet

Step 2: Import the NgxComponentOutletModule:

import { NgxComponentOutletModule } from 'ngx-component-outlet';
 
@NgModule({
  declarations: [ AppComponent ],
  imports: [ NgxComponentOutletModule.forRoot() ],
  bootstrap: [ AppComponent ]
})
export class AppModule {}

Step 3: Create components that your want to use dynamically:

@Component({
    selector: 'app-dynamic-comp-a',
    template: `I'm Dynamic Component A. Hello, {{ name }}!`
})
export class CompAComponent {
    @Input() name: string;
}
@Component({
    selector: 'app-dynamic-comp-b',
    template: `I'm Dynamic Component B. Hello, {{ name }}!`
})
export class CompBComponent {
    @Input() name: string;
}

Step 4: Add components to declarations and entryComponents:

@NgModule({
    ...
    declarations[ ..., CompAComponent, CompBComponent ],
    entryComponents: [ CompAComponent, CompBComponent ]
})
export class AppModule {}

Step 5: Create a host component with the same inputs/outputs:

@Component({
    selector: 'app-host-for-dynamic',
    template: ''
})
export class HostComponent {
    @Input() name: string;
}

Step 6: Add the component to declarations:

@NgModule({
    ...
    declarations[ ..., HostComponent ],
    ...
})
export class AppModule {}

Step 7: Now show dynamic component in AppComponent:

import { Component } from '@angular/core';
 
@Component({
    selector: 'app-root',
    template: `
        <app-host-for-dynamic [ngxComponentOutlet]="componentA"
          [name]="'Angular 5!'"></app-host-for-dynamic>
        
        <app-host-for-dynamic [ngxComponentOutlet]="componentB"
          [name]="'Angular 6?'"></app-host-for-dynamic>
    `
})
export class AppComponent {
    componentA = CompAComponent;
    componentB = CompBComponent;
}

And you will have in AppModule:

import { NgxComponentOutletModule } from 'ngx-component-outlet';
 
@NgModule({
  imports:      [ NgxComponentOutletModule.forRoot() ],
  declarations: [ AppComponent, CompAComponent, CompBComponent, HostComponent ],
  entryComponents: [ CompAComponent, CompBComponent ],
  bootstrap:    [ AppComponent ]
})
export class AppModule {}

API

Input Type Default Required Description
[ngxComponentOutlet] Type<any> n/a yes
[ngxComponentOutletInjector] Injector n/a no
[ngxComponentOutletContent] any[][] n/a no
[ngxComponentOutletNgModuleFactory] NgModuleFactory<any> n/a no
Output Type Description
(ngxComponentOutletActivate) any
(ngxComponentOutletDeactivate) any

Advanced Use Cases

Here is a demo repository showing ngx-component-outlet and Angular in action.

Package Sidebar

Install

npm i ngx-component-outlet

Weekly Downloads

39

Version

0.0.8

License

MIT

Unpacked Size

217 kB

Total Files

22

Last publish

Collaborators

  • thekiba