UNPKG

component-injector

Version:

Component Injector service which allows to inject dynamically components into angular2+ projects

130 lines (126 loc) 3.93 kB
import { Injectable, ComponentFactoryResolver, ɵɵdefineInjectable, ɵɵinject, NgModule } from '@angular/core'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ComponentInjector { /** * @param {?} resolver */ constructor(resolver) { this.resolver = resolver; } /** * @param {?} componentsList * @return {?} */ setComponentFactories(componentsList) { if (componentsList) { componentsList.forEach((/** * @param {?} component * @return {?} */ (component) => { /** @type {?} */ let factory = this.resolver.resolveComponentFactory(component); if (factory) { ComponentInjector.entryComponentsFactories.push(factory); } })); } } /** * @param {?} container * @param {?} componentSelector * @return {?} */ inject(container, componentSelector) { /** @type {?} */ let componentFactory = this.getComponentFactory(componentSelector); if (componentFactory) { return this.injectComponentFactory(container, componentFactory); } else { console.warn('Component [' + componentSelector + '] cannot be found! ' + 'Make sure it is included in the `entryComponents` list.'); } return null; } /** * @param {?} componentRef * @param {?} properties * @return {?} */ setProperties(componentRef, properties) { if (componentRef) { for (let property in properties) { if (properties.hasOwnProperty(property)) { componentRef.instance[property] = properties[property]; } } } } /** * @param {?} componentRef * @return {?} */ remove(componentRef) { if (componentRef) { componentRef.destroy(); } componentRef = null; } /** * @protected * @param {?} componentSelector * @return {?} */ getComponentFactory(componentSelector) { /** @type {?} */ let factories = ComponentInjector.entryComponentsFactories; /** @type {?} */ let componentFactory = factories.find((/** * @param {?} component * @return {?} */ (component) => { return component.selector === componentSelector; })); return componentFactory ? componentFactory : null; } /** * @protected * @param {?} container * @param {?} componentFactory * @return {?} */ injectComponentFactory(container, componentFactory) { return container.createComponent(componentFactory); } } ComponentInjector.entryComponentsFactories = []; ComponentInjector.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ ComponentInjector.ctorParameters = () => [ { type: ComponentFactoryResolver } ]; /** @nocollapse */ ComponentInjector.ngInjectableDef = ɵɵdefineInjectable({ factory: function ComponentInjector_Factory() { return new ComponentInjector(ɵɵinject(ComponentFactoryResolver)); }, token: ComponentInjector, providedIn: "root" }); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class ComponentInjectorModule { } ComponentInjectorModule.decorators = [ { type: NgModule, args: [{ declarations: [], imports: [], exports: [] },] } ]; export { ComponentInjector, ComponentInjectorModule }; //# sourceMappingURL=component-injector.js.map