nts-ng2-components
Version:
Paquete de componentes para Angular2 desarrollado por NITSNETS.
53 lines (43 loc) • 1.72 kB
text/typescript
import {
ComponentFactoryResolver,
ComponentRef,
Directive,
EventEmitter,
Injector,
Input,
OnChanges,
Output,
Provider,
ReflectiveInjector,
SimpleChanges,
Type,
ViewContainerRef,
} from '@angular/core';
export class NtsComponentLoaderDirective implements OnChanges {
ntsComponentLoader: Type<any>;
ntsComponentLoaderInjector: Injector;
ntsComponentLoaderProviders: Provider[];
ntsComponentLoaderProjectableNodes: any[][];
ntsComponentLoaded = new EventEmitter<ComponentRef<any>>(false);
constructor(
private _cmpFactoryResolver: ComponentFactoryResolver,
private _viewContainerRef: ViewContainerRef
) { }
ngOnChanges(changes: SimpleChanges) {
if (changes.hasOwnProperty('ntsComponentLoader')) {
this._viewContainerRef.clear();
if (this.ntsComponentLoader) {
let injector = this.ntsComponentLoaderInjector || this._viewContainerRef.parentInjector;
if (Array.isArray(this.ntsComponentLoaderProviders) && this.ntsComponentLoaderProviders.length > 0) {
injector = ReflectiveInjector.resolveAndCreate(this.ntsComponentLoaderProviders, injector);
}
const cmpRef = this._viewContainerRef.createComponent(
this._cmpFactoryResolver.resolveComponentFactory(this.ntsComponentLoader),
this._viewContainerRef.length, injector, this.ntsComponentLoaderProjectableNodes
);
this.ntsComponentLoaded.emit(cmpRef);
}
}
}
}