UNPKG

ngx-dynamic-compiler

Version:

136 lines (135 loc) 9.56 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewChild, ViewContainerRef, Compiler, NgModule, Input, Output, EventEmitter } from '@angular/core'; import { CommonModule } from '@angular/common'; export class NgxDynamicCompilerComponent { /** * @param {?} compiler */ constructor(compiler) { this.compiler = compiler; this.Data = {}; this.Template = ''; this.Output = new EventEmitter(); this.html = ''; this.returnUrl = '/'; this.showFilter = true; } /** * @return {?} */ ngOnInit() { this.compileTemplate(this.Data); } /** * @return {?} */ ngOnChanges() { } /** * @param {?} data * @return {?} */ compileTemplate(data) { /** @type {?} */ let metaData = { // template:this.template, template: this.Template, selector: 'ptv-template' }; /** @type {?} */ let factory = this.createComponentFactorySync(this.compiler, metaData, null, data); if (this.componentRef) { this.componentRef.destroy(); this.componentRef = null; } this.componentRef = this.container.createComponent(factory); } /** * @param {?} compiler * @param {?} metadata * @param {?} componentClass * @param {?} data * @return {?} */ createComponentFactorySync(compiler, metadata, componentClass, data) { /** @type {?} */ const cmpClass = componentClass || class RuntimeComponent { constructor() { this.Data = data; } }; /** @type {?} */ const decoratedCmp = Component(metadata)(cmpClass); class RuntimeModule { } RuntimeModule.decorators = [ { type: NgModule, args: [{ imports: [CommonModule], declarations: [decoratedCmp] },] }, ]; /** @type {?} */ let module = compiler.compileModuleAndAllComponentsSync(RuntimeModule); console.log(JSON.stringify(module.componentFactories)); return module.componentFactories.find((/** * @param {?} el * @return {?} */ el => el.componentType == decoratedCmp)); } /** * @return {?} */ ngOnDestroy() { if (this.componentRef) { this.componentRef.destroy(); this.componentRef = null; ; } } } NgxDynamicCompilerComponent.decorators = [ { type: Component, args: [{ selector: 'ngx-dc', template: ` <div #container> </div> ` }] } ]; /** @nocollapse */ NgxDynamicCompilerComponent.ctorParameters = () => [ { type: Compiler } ]; NgxDynamicCompilerComponent.propDecorators = { container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }], Data: [{ type: Input }], Template: [{ type: Input }], Output: [{ type: Output }] }; if (false) { /** @type {?} */ NgxDynamicCompilerComponent.prototype.container; /** @type {?} */ NgxDynamicCompilerComponent.prototype.id; /** @type {?} */ NgxDynamicCompilerComponent.prototype.Data; /** @type {?} */ NgxDynamicCompilerComponent.prototype.Template; /** @type {?} */ NgxDynamicCompilerComponent.prototype.Output; /** @type {?} */ NgxDynamicCompilerComponent.prototype.html; /** @type {?} */ NgxDynamicCompilerComponent.prototype.returnUrl; /** @type {?} */ NgxDynamicCompilerComponent.prototype.showFilter; /** @type {?} */ NgxDynamicCompilerComponent.prototype.componentRef; /** * @type {?} * @private */ NgxDynamicCompilerComponent.prototype.compiler; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWR5bmFtaWMtY29tcGlsZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWR5bmFtaWMtY29tcGlsZXIvIiwic291cmNlcyI6WyJsaWIvbmd4LWR5bmFtaWMtY29tcGlsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVSLFNBQVMsRUFDVCxnQkFBZ0IsRUFHaEIsUUFBUSxFQUVSLFFBQVEsRUFFUixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFVbkQsTUFBTSxPQUFPLDJCQUEyQjs7OztJQVV0QyxZQUVVLFFBQWlCO1FBQWpCLGFBQVEsR0FBUixRQUFRLENBQVM7UUFUbEIsU0FBSSxHQUFNLEVBQUUsQ0FBQztRQUNiLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDYixXQUFNLEdBQUUsSUFBSSxZQUFZLEVBQU8sQ0FBQTtRQUN6QyxTQUFJLEdBQUssRUFBRSxDQUFDO1FBQ1osY0FBUyxHQUFHLEdBQUcsQ0FBQztRQUNoQixlQUFVLEdBQUUsSUFBSSxDQUFDO0lBSWMsQ0FBQzs7OztJQUVoQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakMsQ0FBQzs7OztJQUNELFdBQVc7SUFFWCxDQUFDOzs7OztJQUtELGVBQWUsQ0FBQyxJQUFJOztZQUNkLFFBQVEsR0FBRzs7WUFFYixRQUFRLEVBQUMsSUFBSSxDQUFDLFFBQVE7WUFDdEIsUUFBUSxFQUFDLGNBQWM7U0FDeEI7O1lBQ0UsT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDO1FBQy9FLElBQUcsSUFBSSxDQUFDLFlBQVksRUFBQztZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDOzs7Ozs7OztJQUVELDBCQUEwQixDQUFDLFFBQWlCLEVBQUMsUUFBWSxFQUFDLGNBQWtCLEVBQUMsSUFBSTs7Y0FDekUsUUFBUSxHQUFHLGNBQWMsSUFBSSxNQUFNLGdCQUFnQjtZQUF0QjtnQkFBeUIsU0FBSSxHQUFDLElBQUksQ0FBQTtZQUFBLENBQUM7U0FBQTs7Y0FDaEUsWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFFbEQsTUFDTSxhQUFhOzs7b0JBRGxCLFFBQVEsU0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLFlBQVksQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLFlBQVksQ0FBQyxFQUFDOzs7WUFHMUQsTUFBTSxHQUFPLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxhQUFhLENBQUM7UUFFMUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDdkQsT0FBTyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSTs7OztRQUFDLEVBQUUsQ0FBQSxFQUFFLENBQUEsRUFBRSxDQUFDLGFBQWEsSUFBRSxZQUFZLEVBQUMsQ0FBQztJQUU1RSxDQUFDOzs7O0lBSUQsV0FBVztRQUNULElBQUcsSUFBSSxDQUFDLFlBQVksRUFBQztZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQUEsQ0FBQztTQUMzQjtJQUNILENBQUM7OztZQXBFRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRTs7OztHQUlUO2FBRUY7Ozs7WUFqQkUsUUFBUTs7O3dCQW1CUixTQUFTLFNBQUMsV0FBVyxFQUFDLEVBQUMsSUFBSSxFQUFDLGdCQUFnQixFQUFDO21CQUU3QyxLQUFLO3VCQUNMLEtBQUs7cUJBQ0wsTUFBTTs7OztJQUpQLGdEQUE0RTs7SUFDNUUseUNBQVE7O0lBQ1IsMkNBQXNCOztJQUN0QiwrQ0FBdUI7O0lBQ3ZCLDZDQUF5Qzs7SUFDekMsMkNBQVk7O0lBQ1osZ0RBQWdCOztJQUNoQixpREFBaUI7O0lBQ2pCLG1EQUErQjs7Ozs7SUFHN0IsK0NBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICAgT25Jbml0LFxuICAgVmlld0NoaWxkLFxuICAgVmlld0NvbnRhaW5lclJlZixcbiAgIENvbXBvbmVudFJlZixcbiAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgIENvbXBpbGVyLFxuICAgQ29tcG9uZW50RmFjdG9yeSxcbiAgIE5nTW9kdWxlLFxuICAgT25DaGFuZ2VzLFxuICAgSW5wdXQsXG4gICBPdXRwdXQsXG4gICBFdmVudEVtaXR0ZXJcbiAgICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICAgIGltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZGMnLFxuICB0ZW1wbGF0ZTogYFxuICA8ZGl2ICAjY29udGFpbmVyPlxuXG4gIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIE5neER5bmFtaWNDb21waWxlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLHtyZWFkOlZpZXdDb250YWluZXJSZWZ9KSBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIGlkOm51bGw7XG4gIEBJbnB1dCgpIERhdGE6YW55ID17fTtcbiAgQElucHV0KCkgVGVtcGxhdGUgPSAnJztcbiAgQE91dHB1dCgpIE91dHB1dD0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgaHRtbDphbnk9Jyc7XG4gIHJldHVyblVybCA9ICcvJztcbiAgc2hvd0ZpbHRlciA9dHJ1ZTtcbiAgY29tcG9uZW50UmVmOkNvbXBvbmVudFJlZjxhbnk+O1xuICBjb25zdHJ1Y3RvcihcblxuICAgIHByaXZhdGUgY29tcGlsZXI6Q29tcGlsZXIpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29tcGlsZVRlbXBsYXRlKHRoaXMuRGF0YSlcbiAgfVxuICBuZ09uQ2hhbmdlcygpIHtcblxuICB9XG5cblxuXG5cbiAgY29tcGlsZVRlbXBsYXRlKGRhdGEpe1xuICAgIGxldCBtZXRhRGF0YSA9IHtcbiAgICAgIC8vIHRlbXBsYXRlOnRoaXMudGVtcGxhdGUsXG4gICAgICB0ZW1wbGF0ZTp0aGlzLlRlbXBsYXRlLFxuICAgICAgc2VsZWN0b3I6J3B0di10ZW1wbGF0ZSdcbiAgICB9XG4gICBsZXQgZmFjdG9yeSA9IHRoaXMuY3JlYXRlQ29tcG9uZW50RmFjdG9yeVN5bmModGhpcy5jb21waWxlcixtZXRhRGF0YSxudWxsLGRhdGEpO1xuICAgaWYodGhpcy5jb21wb25lbnRSZWYpe1xuICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgIH1cbiAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xuICB9XG5cbiAgY3JlYXRlQ29tcG9uZW50RmFjdG9yeVN5bmMoY29tcGlsZXI6Q29tcGlsZXIsbWV0YWRhdGE6YW55LGNvbXBvbmVudENsYXNzOmFueSxkYXRhKTpDb21wb25lbnRGYWN0b3J5PGFueT57XG4gICAgY29uc3QgY21wQ2xhc3MgPSBjb21wb25lbnRDbGFzcyB8fCBjbGFzcyBSdW50aW1lQ29tcG9uZW50IHsgRGF0YT1kYXRhfTtcbiAgICBjb25zdCBkZWNvcmF0ZWRDbXAgPSBDb21wb25lbnQobWV0YWRhdGEpKGNtcENsYXNzKTtcblxuICAgIEBOZ01vZHVsZSh7aW1wb3J0czpbQ29tbW9uTW9kdWxlXSxkZWNsYXJhdGlvbnM6W2RlY29yYXRlZENtcF19KVxuICAgIGNsYXNzIFJ1bnRpbWVNb2R1bGV7XG4gICAgfVxuICAgIGxldCBtb2R1bGU6YW55ID0gY29tcGlsZXIuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNTeW5jKFJ1bnRpbWVNb2R1bGUpO1xuXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobW9kdWxlLmNvbXBvbmVudEZhY3RvcmllcykpO1xuICAgIHJldHVybiBtb2R1bGUuY29tcG9uZW50RmFjdG9yaWVzLmZpbmQoZWw9PmVsLmNvbXBvbmVudFR5cGU9PWRlY29yYXRlZENtcCk7XG5cbiAgfVxuXG5cblxuICBuZ09uRGVzdHJveSgpe1xuICAgIGlmKHRoaXMuY29tcG9uZW50UmVmKXtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDs7XG4gICAgfVxuICB9XG59XG4iXX0=