@c-standard/angular-devui-extension
Version:
an extensional components lib for devui
49 lines • 6.48 kB
JavaScript
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