UNPKG

@c-standard/angular-devui-extension

Version:

an extensional components lib for devui

49 lines 6.48 kB
import { Directive, EventEmitter, Input, Output, } from '@angular/core'; import * as i0 from "@angular/core"; export class ComponentLoaderDirective { constructor(vcr) { this.vcr = vcr; this.keyExpr = 'id'; this.callback = new EventEmitter(); } ngOnChanges(simple) { if (simple) { this.createComponent(); } } createComponent() { this.vcr.clear(); const comp = this.dataSource?.find((t) => (t[this.keyExpr] == this.componentId))?.component; if (comp) { const compRef = this.vcr.createComponent(comp); for (const key in this.componentInput) { compRef.instance[key] = this.componentInput[key]; } for (const func in this.componentOutput) { // 事件的处理,组件的所有事件都会触发callback事件,在emit结果中标记是组件的哪个事件所触发 compRef.instance.func.subscribe((result) => this.callback.emit(result)); } } } } ComponentLoaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ComponentLoaderDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive }); ComponentLoaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.7", type: ComponentLoaderDirective, selector: "[dComponent]", inputs: { keyExpr: "keyExpr", dataSource: "dataSource", componentId: "componentId", componentInput: "componentInput", componentOutput: "componentOutput" }, outputs: { callback: "callback" }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: ComponentLoaderDirective, decorators: [{ type: Directive, args: [{ selector: '[dComponent]', }] }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { keyExpr: [{ type: Input }], dataSource: [{ type: Input }], componentId: [{ type: Input }], componentInput: [{ type: Input }], componentOutput: [{ type: Input }], callback: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWxvYWRlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2NvbXBvbmVudC1sb2FkZXIvY29tcG9uZW50LWxvYWRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FHVCxNQUFNLGVBQWUsQ0FBQzs7QUFNdkIsTUFBTSxPQUFPLHdCQUF3QjtJQVFqQyxZQUFvQixHQUFxQjtRQUFyQixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQVBoQyxZQUFPLEdBQW9CLElBQUksQ0FBQztRQUsvQixhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFFcEIsQ0FBQztJQUU3QyxXQUFXLENBQUMsTUFBcUI7UUFDN0IsSUFBSSxNQUFNLEVBQUM7WUFDUCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO1FBQzVGLElBQUksSUFBSSxFQUFFO1lBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEQ7WUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3JDLG9EQUFvRDtnQkFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ2hGO1NBQ0o7SUFDTCxDQUFDOztxSEE3QlEsd0JBQXdCO3lHQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFIcEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsY0FBYztpQkFDM0I7dUdBRVksT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBEaXJlY3RpdmUsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50LCBEeW5hbWljQ29tcG9uZW50SW5wdXQgfSBmcm9tICcuL2NvbXBvbmVudC1sb2FkZXInO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tkQ29tcG9uZW50XScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRMb2FkZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gICAgQElucHV0KCkga2V5RXhwcjogc3RyaW5nIHwgbnVtYmVyID0gJ2lkJztcclxuICAgIEBJbnB1dCgpIGRhdGFTb3VyY2U/OiBEeW5hbWljQ29tcG9uZW50PGFueT5bXTtcclxuICAgIEBJbnB1dCgpIGNvbXBvbmVudElkPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gICAgQElucHV0KCkgY29tcG9uZW50SW5wdXQ/OiBEeW5hbWljQ29tcG9uZW50SW5wdXQ7XHJcbiAgICBASW5wdXQoKSBjb21wb25lbnRPdXRwdXQ/OiBhbnk7XHJcbiAgICBAT3V0cHV0KCkgY2FsbGJhY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y3I6IFZpZXdDb250YWluZXJSZWYpIHt9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKHNpbXBsZSl7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHRoaXMudmNyLmNsZWFyKCk7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuZGF0YVNvdXJjZT8uZmluZCgodCkgPT4gKHRbdGhpcy5rZXlFeHByXSA9PSB0aGlzLmNvbXBvbmVudElkKSk/LmNvbXBvbmVudDtcclxuICAgICAgICBpZiAoY29tcCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wUmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KGNvbXApO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudElucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlW2tleV0gPSB0aGlzLmNvbXBvbmVudElucHV0W2tleV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChjb25zdCBmdW5jIGluIHRoaXMuY29tcG9uZW50T3V0cHV0KSB7XHJcbiAgICAgICAgICAgICAgICAvLyDkuovku7bnmoTlpITnkIbvvIznu4Tku7bnmoTmiYDmnInkuovku7bpg73kvJrop6blj5FjYWxsYmFja+S6i+S7tu+8jOWcqGVtaXTnu5PmnpzkuK3moIforrDmmK/nu4Tku7bnmoTlk6rkuKrkuovku7bmiYDop6blj5FcclxuICAgICAgICAgICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuZnVuYy5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB0aGlzLmNhbGxiYWNrLmVtaXQocmVzdWx0KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19