rd-outer-component 0.0.88 → 0.0.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@ import * as i3 from "ng-zorro-antd/checkbox";
7
7
  export class CustomCheckboxComponent {
8
8
  set options(val) {
9
9
  this._rawOptions = val ? [...val] : [];
10
+ this.filteredOptions = val;
10
11
  }
11
12
  get options() {
12
13
  return this._rawOptions;
@@ -16,6 +17,7 @@ export class CustomCheckboxComponent {
16
17
  this.label = '';
17
18
  this.name = '';
18
19
  this.disabled = false;
20
+ this.filteredOptions = [];
19
21
  this.valueChange = new EventEmitter();
20
22
  this._rawOptions = [];
21
23
  this.value = undefined;
@@ -38,8 +40,13 @@ export class CustomCheckboxComponent {
38
40
  this.onTouched = fn;
39
41
  }
40
42
  handleValueChange(value) {
41
- this.onChange(value);
42
- this.valueChange.emit(value);
43
+ // 1. 核心修复:对 value 进行深拷贝
44
+ // 这样 emit 出去的就不再是 formFieldStruct 里的原始对象引用了
45
+ const valueCopy = JSON.parse(JSON.stringify(value));
46
+ // 2. 通知 FormArray 更新
47
+ this.onChange(valueCopy);
48
+ // 3. 向外发射新拷贝的对象
49
+ this.valueChange.emit(valueCopy);
43
50
  }
44
51
  }
45
52
  CustomCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
@@ -49,7 +56,7 @@ CustomCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
49
56
  useExisting: forwardRef(() => CustomCheckboxComponent),
50
57
  multi: true,
51
58
  },
52
- ], ngImport: i0, template: "<div>\n <div\n class=\"rd-form-item-check\"\n [ngClass]=\"{\n disabled: disabled\n }\"\n >\n <div class=\"rd-form-item-check-label\">{{ label }}</div>\n <nz-checkbox-group\n [(ngModel)]=\"options\"\n (ngModelChange)=\"handleValueChange($event)\"\n ></nz-checkbox-group>\n </div>\n</div>\n", styles: ["::ng-deep .rd-form-item-check .ant-checkbox-group{display:flex;margin-top:11px}::ng-deep .rd-form-item-check .ant-checkbox-group label{flex:1;color:#030712;font-size:14px;font-weight:500}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked .ant-checkbox-inner{background-color:#367af6;border-color:#367af6}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-inner{border-radius:4px}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked:after{border-color:#367af6;border-radius:4px}:host .rd-form-item-check{position:relative;background-color:#fff;width:100%}:host .rd-form-item-check-label{font-size:14px;font-weight:500;color:#6b7280}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NzCheckboxGroupComponent, selector: "nz-checkbox-group", inputs: ["nzDisabled"], exportAs: ["nzCheckboxGroup"] }] });
59
+ ], ngImport: i0, template: "<div>\n <div\n class=\"rd-form-item-check\"\n [ngClass]=\"{\n disabled: disabled,\n }\"\n >\n <div class=\"rd-form-item-check-label\">{{ label }}</div>\n <nz-checkbox-group\n [(ngModel)]=\"filteredOptions\"\n (ngModelChange)=\"handleValueChange($event)\"\n ></nz-checkbox-group>\n </div>\n</div>\n", styles: ["::ng-deep .rd-form-item-check .ant-checkbox-group{display:flex;margin-top:11px}::ng-deep .rd-form-item-check .ant-checkbox-group label{flex:1;color:#030712;font-size:14px;font-weight:500}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked .ant-checkbox-inner{background-color:#367af6;border-color:#367af6}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-inner{border-radius:4px}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked:after{border-color:#367af6;border-radius:4px}:host .rd-form-item-check{position:relative;background-color:#fff;width:100%}:host .rd-form-item-check-label{font-size:14px;font-weight:500;color:#6b7280}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NzCheckboxGroupComponent, selector: "nz-checkbox-group", inputs: ["nzDisabled"], exportAs: ["nzCheckboxGroup"] }] });
53
60
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomCheckboxComponent, decorators: [{
54
61
  type: Component,
55
62
  args: [{ selector: 'app-rd-checkbox', providers: [
@@ -58,7 +65,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
58
65
  useExisting: forwardRef(() => CustomCheckboxComponent),
59
66
  multi: true,
60
67
  },
61
- ], template: "<div>\n <div\n class=\"rd-form-item-check\"\n [ngClass]=\"{\n disabled: disabled\n }\"\n >\n <div class=\"rd-form-item-check-label\">{{ label }}</div>\n <nz-checkbox-group\n [(ngModel)]=\"options\"\n (ngModelChange)=\"handleValueChange($event)\"\n ></nz-checkbox-group>\n </div>\n</div>\n", styles: ["::ng-deep .rd-form-item-check .ant-checkbox-group{display:flex;margin-top:11px}::ng-deep .rd-form-item-check .ant-checkbox-group label{flex:1;color:#030712;font-size:14px;font-weight:500}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked .ant-checkbox-inner{background-color:#367af6;border-color:#367af6}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-inner{border-radius:4px}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked:after{border-color:#367af6;border-radius:4px}:host .rd-form-item-check{position:relative;background-color:#fff;width:100%}:host .rd-form-item-check-label{font-size:14px;font-weight:500;color:#6b7280}\n"] }]
68
+ ], template: "<div>\n <div\n class=\"rd-form-item-check\"\n [ngClass]=\"{\n disabled: disabled,\n }\"\n >\n <div class=\"rd-form-item-check-label\">{{ label }}</div>\n <nz-checkbox-group\n [(ngModel)]=\"filteredOptions\"\n (ngModelChange)=\"handleValueChange($event)\"\n ></nz-checkbox-group>\n </div>\n</div>\n", styles: ["::ng-deep .rd-form-item-check .ant-checkbox-group{display:flex;margin-top:11px}::ng-deep .rd-form-item-check .ant-checkbox-group label{flex:1;color:#030712;font-size:14px;font-weight:500}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked .ant-checkbox-inner{background-color:#367af6;border-color:#367af6}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-inner{border-radius:4px}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked:after{border-color:#367af6;border-radius:4px}:host .rd-form-item-check{position:relative;background-color:#fff;width:100%}:host .rd-form-item-check-label{font-size:14px;font-weight:500;color:#6b7280}\n"] }]
62
69
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
63
70
  type: Input
64
71
  }], name: [{
@@ -70,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
70
77
  }], valueChange: [{
71
78
  type: Output
72
79
  }] } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC1saWIvc3JjL2xpYi9tb2R1bGVzL2N1c3RvbS1jaGVja2JveC9jdXN0b20tY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkLWxpYi9zcmMvbGliL21vZHVsZXMvY3VzdG9tLWNoZWNrYm94L2N1c3RvbS1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBZXpFLE1BQU0sT0FBTyx1QkFBdUI7SUFJbEMsSUFDSSxPQUFPLENBQUMsR0FBb0I7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQVlELFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBckJqQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBU2hCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFcEQsZ0JBQVcsR0FBb0IsRUFBRSxDQUFDO1FBRTFDLFVBQUssR0FBOEIsU0FBUyxDQUFDO1FBQzdDLGdCQUFXLEdBQXVDLFNBQVMsQ0FBQztRQUU1RCxhQUFRLEdBQXFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUN0RCxjQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRVksQ0FBQztJQUU5QyxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBb0I7UUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFzQjtRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7O3FIQTdDVSx1QkFBdUI7eUdBQXZCLHVCQUF1Qix1S0FSdkI7UUFDVDtZQUNFLE9BQU8sRUFBRSxpQkFBaUI7WUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztZQUN0RCxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsMEJDckJILHNVQWNBOzRGRFNhLHVCQUF1QjtrQkFabkMsU0FBUzsrQkFDRSxpQkFBaUIsYUFHaEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3dHQUdRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRixPQUFPO3NCQURWLEtBQUs7Z0JBUUksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvY29tbW9uLnR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmQtY2hlY2tib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLWNoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLWNoZWNrYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VzdG9tQ2hlY2tib3hDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tQ2hlY2tib3hDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbmFtZSA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyh2YWw6IElTZWxlY3RPcHRpb25bXSkge1xuICAgIHRoaXMuX3Jhd09wdGlvbnMgPSB2YWwgPyBbLi4udmFsXSA6IFtdO1xuICB9XG4gIGdldCBvcHRpb25zKCk6IElTZWxlY3RPcHRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jhd09wdGlvbnM7XG4gIH1cblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElTZWxlY3RPcHRpb25bXT4oKTtcblxuICBwcml2YXRlIF9yYXdPcHRpb25zOiBJU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICB2YWx1ZTogSVNlbGVjdE9wdGlvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgbmF0aXZlVmFsdWU6IElTZWxlY3RPcHRpb25bJ3ZhbHVlJ10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgb25DaGFuZ2U6ICh2YWx1ZTogSVNlbGVjdE9wdGlvbltdKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IElTZWxlY3RPcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5uYXRpdmVWYWx1ZSA9IHZhbHVlPy52YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgaGFuZGxlVmFsdWVDaGFuZ2UodmFsdWU6IElTZWxlY3RPcHRpb25bXSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cInJkLWZvcm0taXRlbS1jaGVja1wiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkXG4gICAgfVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwicmQtZm9ybS1pdGVtLWNoZWNrLWxhYmVsXCI+e3sgbGFiZWwgfX08L2Rpdj5cbiAgICA8bnotY2hlY2tib3gtZ3JvdXBcbiAgICAgIFsobmdNb2RlbCldPVwib3B0aW9uc1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9uei1jaGVja2JveC1ncm91cD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNoZWNrYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NoYXJlZC1saWIvc3JjL2xpYi9tb2R1bGVzL2N1c3RvbS1jaGVja2JveC9jdXN0b20tY2hlY2tib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkLWxpYi9zcmMvbGliL21vZHVsZXMvY3VzdG9tLWNoZWNrYm94L2N1c3RvbS1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBZXpFLE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsSUFDSSxPQUFPLENBQUMsR0FBb0I7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQVlELFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEJqQyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzFCLG9CQUFlLEdBQW9CLEVBQUUsQ0FBQztRQVc1QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRXBELGdCQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUUxQyxVQUFLLEdBQThCLFNBQVMsQ0FBQztRQUM3QyxnQkFBVyxHQUF1QyxTQUFTLENBQUM7UUFFNUQsYUFBUSxHQUFxQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDdEQsY0FBUyxHQUFlLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUVZLENBQUM7SUFFOUMsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQW9CO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBc0I7UUFDdEMsd0JBQXdCO1FBQ3hCLDRDQUE0QztRQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVwRCxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6QixnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7cUhBdkRVLHVCQUF1Qjt5R0FBdkIsdUJBQXVCLHVLQVJ2QjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO1lBQ3RELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwwQkNyQkgsK1VBY0E7NEZEU2EsdUJBQXVCO2tCQVpuQyxTQUFTOytCQUNFLGlCQUFpQixhQUdoQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQzs0QkFDdEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7d0dBR1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUlGLE9BQU87c0JBRFYsS0FBSztnQkFTSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi90eXBlcy9jb21tb24udHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1yZC1jaGVja2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tY2hlY2tib3guY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDdXN0b21DaGVja2JveENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21DaGVja2JveENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBuYW1lID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIGZpbHRlcmVkT3B0aW9uczogSVNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnModmFsOiBJU2VsZWN0T3B0aW9uW10pIHtcbiAgICB0aGlzLl9yYXdPcHRpb25zID0gdmFsID8gWy4uLnZhbF0gOiBbXTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHZhbDtcbiAgfVxuICBnZXQgb3B0aW9ucygpOiBJU2VsZWN0T3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9yYXdPcHRpb25zO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJU2VsZWN0T3B0aW9uW10+KCk7XG5cbiAgcHJpdmF0ZSBfcmF3T3B0aW9uczogSVNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgdmFsdWU6IElTZWxlY3RPcHRpb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIG5hdGl2ZVZhbHVlOiBJU2VsZWN0T3B0aW9uWyd2YWx1ZSddIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIG9uQ2hhbmdlOiAodmFsdWU6IElTZWxlY3RPcHRpb25bXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBJU2VsZWN0T3B0aW9uKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMubmF0aXZlVmFsdWUgPSB2YWx1ZT8udmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGhhbmRsZVZhbHVlQ2hhbmdlKHZhbHVlOiBJU2VsZWN0T3B0aW9uW10pOiB2b2lkIHtcbiAgICAvLyAxLiDmoLjlv4Pkv67lpI3vvJrlr7kgdmFsdWUg6L+b6KGM5rex5ou36LSdXG4gICAgLy8g6L+Z5qC3IGVtaXQg5Ye65Y6755qE5bCx5LiN5YaN5pivIGZvcm1GaWVsZFN0cnVjdCDph4znmoTljp/lp4vlr7nosaHlvJXnlKjkuoZcbiAgICBjb25zdCB2YWx1ZUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG5cbiAgICAvLyAyLiDpgJrnn6UgRm9ybUFycmF5IOabtOaWsFxuICAgIHRoaXMub25DaGFuZ2UodmFsdWVDb3B5KTtcblxuICAgIC8vIDMuIOWQkeWkluWPkeWwhOaWsOaLt+i0neeahOWvueixoVxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZUNvcHkpO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJyZC1mb3JtLWl0ZW0tY2hlY2tcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICB9XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJyZC1mb3JtLWl0ZW0tY2hlY2stbGFiZWxcIj57eyBsYWJlbCB9fTwvZGl2PlxuICAgIDxuei1jaGVja2JveC1ncm91cFxuICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPjwvbnotY2hlY2tib3gtZ3JvdXA+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -41,6 +41,7 @@ import { debounceTime, filter, switchMap } from 'rxjs/operators';
41
41
  class CustomCheckboxComponent {
42
42
  set options(val) {
43
43
  this._rawOptions = val ? [...val] : [];
44
+ this.filteredOptions = val;
44
45
  }
45
46
  get options() {
46
47
  return this._rawOptions;
@@ -50,6 +51,7 @@ class CustomCheckboxComponent {
50
51
  this.label = '';
51
52
  this.name = '';
52
53
  this.disabled = false;
54
+ this.filteredOptions = [];
53
55
  this.valueChange = new EventEmitter();
54
56
  this._rawOptions = [];
55
57
  this.value = undefined;
@@ -72,8 +74,13 @@ class CustomCheckboxComponent {
72
74
  this.onTouched = fn;
73
75
  }
74
76
  handleValueChange(value) {
75
- this.onChange(value);
76
- this.valueChange.emit(value);
77
+ // 1. 核心修复:对 value 进行深拷贝
78
+ // 这样 emit 出去的就不再是 formFieldStruct 里的原始对象引用了
79
+ const valueCopy = JSON.parse(JSON.stringify(value));
80
+ // 2. 通知 FormArray 更新
81
+ this.onChange(valueCopy);
82
+ // 3. 向外发射新拷贝的对象
83
+ this.valueChange.emit(valueCopy);
77
84
  }
78
85
  }
79
86
  CustomCheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomCheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
@@ -83,7 +90,7 @@ CustomCheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
83
90
  useExisting: forwardRef(() => CustomCheckboxComponent),
84
91
  multi: true,
85
92
  },
86
- ], ngImport: i0, template: "<div>\n <div\n class=\"rd-form-item-check\"\n [ngClass]=\"{\n disabled: disabled\n }\"\n >\n <div class=\"rd-form-item-check-label\">{{ label }}</div>\n <nz-checkbox-group\n [(ngModel)]=\"options\"\n (ngModelChange)=\"handleValueChange($event)\"\n ></nz-checkbox-group>\n </div>\n</div>\n", styles: ["::ng-deep .rd-form-item-check .ant-checkbox-group{display:flex;margin-top:11px}::ng-deep .rd-form-item-check .ant-checkbox-group label{flex:1;color:#030712;font-size:14px;font-weight:500}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked .ant-checkbox-inner{background-color:#367af6;border-color:#367af6}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-inner{border-radius:4px}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked:after{border-color:#367af6;border-radius:4px}:host .rd-form-item-check{position:relative;background-color:#fff;width:100%}:host .rd-form-item-check-label{font-size:14px;font-weight:500;color:#6b7280}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NzCheckboxGroupComponent, selector: "nz-checkbox-group", inputs: ["nzDisabled"], exportAs: ["nzCheckboxGroup"] }] });
93
+ ], ngImport: i0, template: "<div>\n <div\n class=\"rd-form-item-check\"\n [ngClass]=\"{\n disabled: disabled,\n }\"\n >\n <div class=\"rd-form-item-check-label\">{{ label }}</div>\n <nz-checkbox-group\n [(ngModel)]=\"filteredOptions\"\n (ngModelChange)=\"handleValueChange($event)\"\n ></nz-checkbox-group>\n </div>\n</div>\n", styles: ["::ng-deep .rd-form-item-check .ant-checkbox-group{display:flex;margin-top:11px}::ng-deep .rd-form-item-check .ant-checkbox-group label{flex:1;color:#030712;font-size:14px;font-weight:500}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked .ant-checkbox-inner{background-color:#367af6;border-color:#367af6}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-inner{border-radius:4px}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked:after{border-color:#367af6;border-radius:4px}:host .rd-form-item-check{position:relative;background-color:#fff;width:100%}:host .rd-form-item-check-label{font-size:14px;font-weight:500;color:#6b7280}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.NzCheckboxGroupComponent, selector: "nz-checkbox-group", inputs: ["nzDisabled"], exportAs: ["nzCheckboxGroup"] }] });
87
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: CustomCheckboxComponent, decorators: [{
88
95
  type: Component,
89
96
  args: [{ selector: 'app-rd-checkbox', providers: [
@@ -92,7 +99,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
92
99
  useExisting: forwardRef(() => CustomCheckboxComponent),
93
100
  multi: true,
94
101
  },
95
- ], template: "<div>\n <div\n class=\"rd-form-item-check\"\n [ngClass]=\"{\n disabled: disabled\n }\"\n >\n <div class=\"rd-form-item-check-label\">{{ label }}</div>\n <nz-checkbox-group\n [(ngModel)]=\"options\"\n (ngModelChange)=\"handleValueChange($event)\"\n ></nz-checkbox-group>\n </div>\n</div>\n", styles: ["::ng-deep .rd-form-item-check .ant-checkbox-group{display:flex;margin-top:11px}::ng-deep .rd-form-item-check .ant-checkbox-group label{flex:1;color:#030712;font-size:14px;font-weight:500}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked .ant-checkbox-inner{background-color:#367af6;border-color:#367af6}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-inner{border-radius:4px}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked:after{border-color:#367af6;border-radius:4px}:host .rd-form-item-check{position:relative;background-color:#fff;width:100%}:host .rd-form-item-check-label{font-size:14px;font-weight:500;color:#6b7280}\n"] }]
102
+ ], template: "<div>\n <div\n class=\"rd-form-item-check\"\n [ngClass]=\"{\n disabled: disabled,\n }\"\n >\n <div class=\"rd-form-item-check-label\">{{ label }}</div>\n <nz-checkbox-group\n [(ngModel)]=\"filteredOptions\"\n (ngModelChange)=\"handleValueChange($event)\"\n ></nz-checkbox-group>\n </div>\n</div>\n", styles: ["::ng-deep .rd-form-item-check .ant-checkbox-group{display:flex;margin-top:11px}::ng-deep .rd-form-item-check .ant-checkbox-group label{flex:1;color:#030712;font-size:14px;font-weight:500}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked .ant-checkbox-inner{background-color:#367af6;border-color:#367af6}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-inner{border-radius:4px}::ng-deep .rd-form-item-check .ant-checkbox-group .ant-checkbox-checked:after{border-color:#367af6;border-radius:4px}:host .rd-form-item-check{position:relative;background-color:#fff;width:100%}:host .rd-form-item-check-label{font-size:14px;font-weight:500;color:#6b7280}\n"] }]
96
103
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { label: [{
97
104
  type: Input
98
105
  }], name: [{