import { Component, forwardRef, Input, Output, EventEmitter, NgModule } from "@angular/core"; import { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from "@angular/forms"; import { AbnormalTypeService } from "../services/abnormal-type.service"; import { CommonModule } from "@angular/common"; import { UISelectBoxModule } from "../select-box/select-box.component"; let noop = () => { }; export const CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR: any = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => AbnormalSelectComponent), multi: true }; @Component({ selector: "yzt-abnormal", template: ` `, styles: [` `], providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR] }) export class AbnormalSelectComponent implements ControlValueAccessor { @Input() placeholder = '请选择…'; /** * 显示值的标签 */ @Input() label = ''; @Output() onChange: EventEmitter = new EventEmitter(); public onTouchedCallback: () => void = noop; public onChangeCallback: (_: any) => void = noop; public innerValue; dataHandler: Function = this.abnormalTypeService.selectBoxHandler(); labelHandler: Function = this.abnormalTypeService.selectBoxLabelHandler(); // 获取属性 get value(): any { return this.innerValue; }; // 设置属性,并触发监听器 set value(v: any) { if (v !== this.innerValue) { this.innerValue = v; this.onChangeCallback(v); } } constructor(public abnormalTypeService: AbnormalTypeService) { } // 写入值 writeValue(value: any) { if (value !== this.innerValue) { this.innerValue = value; } } // 注册变化处理事件 registerOnChange(fn: any) { this.onChangeCallback = fn; } // 注册触摸事件 registerOnTouched(fn: any) { this.onTouchedCallback = fn; } /** * 值改变事件 * @param val */ onValueChange(val) { this.onChange.emit(val); } } @NgModule({ declarations: [ AbnormalSelectComponent, ], exports: [AbnormalSelectComponent], imports: [ CommonModule, FormsModule, UISelectBoxModule ], providers:[ AbnormalTypeService ] }) export class AbnormalSelectModule { }