component-injector
Version:
Component Injector service which allows to inject dynamically components into angular2+ projects
130 lines (126 loc) • 3.93 kB
JavaScript
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