import { Component, OnInit, Input, Output, EventEmitter, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms'; import { IdService } from '@farris/ui-common'; @Component({ selector: 'farris-checkbox-group', template: `
`, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CheckboxGroupComponent), multi: true, }], styles: [], }) export class CheckboxGroupComponent implements OnInit, ControlValueAccessor { /* 初始化 checkbox 的值 */ @Input() model = []; /* 设置默认name值 */ @Input() name: string; /* 控件水平排列 */ @Input() horizontal: boolean; /* */ @Output() modelChange = new EventEmitter(); constructor(private idSer: IdService) { } ngOnInit() { this.name = this.idSer.generate(); } changeModel(value: any) { const index = this.model.findIndex(ele => { return ele === value; }); // 如果已经选中 则设置为不选中 if (index > -1) { this.model.splice(index, 1); return this.modelChange.emit(this.model); } // 如果没有选中 设置为选中 this.model.push(value); // control的值设置为逗号分隔的字符串 便于存储和传递 this.controlChange(this.model.join()); this.modelChange.emit(this.model); } writeValue(value: any): void { this.model = value this.changeModel(this.model) } registerOnChange(fn: Function): void { this.controlChange = fn } registerOnTouched(fn: Function): void { this.controlTouch = fn } private controlChange: Function = () => { } private controlTouch: Function = () => { } }