ngx-dynamic-compiler
Version:
136 lines (135 loc) • 9.56 kB
JavaScript
/**
* @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=