import { KeyValue } from '@angular/common'; import { AfterViewInit, ElementRef, OnInit } from '@angular/core'; import { Observable, Subject } from 'rxjs'; import { ControlValidatorService } from '../services/control-validator.service'; import { ControlShared } from '../utils'; import { AbstractControl, CascadeParentValue, CascadeParentValueNotification, ControlDataModel, ControlViewModel, ValueControlViewModel, ControlOperateMode } from './control.types'; import { DynamicFormDataConfig } from './designer.types'; import { ControlValidateMoment, ControlValidatorBase } from './validator.types'; /** * 带值控件基类 */ export declare class AbstractValueControlBase implements AbstractControl, OnInit, AfterViewInit, CascadeParentValueNotification { /** * @description 子控件 * * @memberof AbstractValueControlBase */ children: AbstractValueControlBase[]; parent: AbstractControl; /** * @description 控件类型 * * @memberof AbstractValueControlBase */ type: string; /** * @description 是否是设计时 * * @memberof AbstractValueControlBase */ isDesign: boolean; /** * @description 控件model * * @memberof AbstractValueControlBase */ model: T; /** * @description 数据配置信息 * * @memberof AbstractValueControlBase */ dataConfig: DynamicFormDataConfig; /** * @description 是否容器 * * @memberof AbstractValueControlBase */ isContainer: boolean; /** * @description 仅查看 * * @memberof AbstractValueControlBase */ viewOnly: boolean; /** * @description 启用查看时编辑 * * @memberof AbstractValueControlBase */ enableEditAtView: boolean; /** * @description 启用查看时编辑的控件名称列表 * * @memberof AbstractValueControlBase */ enableEditNameList?: string[]; /** * @description 自定义事件名称,如果要有自定义事件需要改变这个字段值 * * @memberof AbstractValueControlBase */ customEventNames: Array; /** * @description 自定义事件 * * @memberof AbstractValueControlBase */ customEvents: Array>; /** * @description 验证器 * * @memberof AbstractValueControlBase */ validators: Array; /** * @description 控件共享 * */ controlShared: ControlShared; hidden: boolean; /** * @description 值改变 * 关联的级联控件 */ cascadeControls: AbstractValueControlBase[]; /** * 控件模式 */ operateMode: ControlOperateMode; /** * @description 级联值改变 * */ readonly valueChanged$: Observable; /** * 级联变化事件 */ readonly cascadeValueChanged$: Observable; /** * @description 全部校验完成 * */ readonly statusChanges$: Observable; /** * 是否有效,当控件验证器都验证通过 返回true * * @readonly * @memberof AbstractValueControlBase */ readonly valid: boolean; readonly designHostClass: string; /** * 是否只读 */ readonly readonly: boolean; /** * 属性值发生变化事件 */ readonly propertyValueChanged$: Observable<{ name: string; value: any; }>; /** * 根据Url获取级联数据可观察对象 * */ cascadeDataByUrl$: Subject; valueElement: ElementRef; private asyncValidatorPendingCount; private _valueChanged; private _statusChanges; private _propertyValueChanged; private _cascadeValueChanged; constructor(); /** * 属性值变化 * @param name 属性名称 * @param value 属性值 */ propertyValueChanged(name: string, value: any): void; ngOnInit(): void; ngAfterViewInit(): void; /** * 刷新默认值 * @memberof AbstractValueControlBase */ refreshModelDefaultValue(force?: boolean): void; /** * 设置默认值 * @memberof AbstractValueControlBase */ setModelDefaultValue(): void; /** * 默认值发生改变 * @memberof AbstractValueControlBase */ defaultValueChange(): void; /** * 获取父级控件的值 * @returns 父级控件的值 * @memberof AbstractValueControlBase */ getCascadeValue(values: CascadeParentValue[]): any; /** * 绑定根据Url获取级联数据 * 这样是为了避免因为多次http请求,先请求的后来造成数据不一致 */ bindCascadeDataByUrl(): void; /** * 父级控件值发生改变时执行 * @param values 父级控件数组 */ onCascadeParentValueChange(values: CascadeParentValue[]): void; /** * 触发默认级联变化 */ onDefaultCascadeValueChange(): void; /** * 是否有效,当控件验证器都验证通过 返回true * * @returns 当控件验证器都验证通过 返回true 否则false * @memberof AbstractValueControlBase */ getValidState(): boolean; /** * @description 获取控件的DataModel * * @returns 控件的DataModel * @memberof AbstractValueControlBase */ getDataModel(): ControlDataModel; /** * @description 设置控件model的value值 * * @param value 控件model的value * @memberof AbstractValueControlBase */ setModelValue(value: any): void; /** * @description 设置mode的value值 * * @returns mode的value值 * @memberof AbstractValueControlBase */ getModelValue(): any; /** * @description 绑定控件事件到默认元素上 * * @memberof AbstractValueControlBase */ bindEvents(): void; /** * @description 根据层级获取元素的子元素,position接受一个数组,可以多层级嵌套 * 例如第一个元素的第二个孩子可以表示为 getChildrenByPosition(element, 0, 1) * 也可以 getChildrenByPosition(element, [0,1]) * @param element 父元素 * @param position 位置数组 * @returns 筛选出的元素 * @memberof AbstractValueControlBase */ getChildrenByPosition(element: any, ...position: number[]): any; /** * @description 绑定控件事件事件到元素 * * @param element 要绑定到的元素 * @returns * @memberof AbstractValueControlBase */ bindEventsToEl(element?: any): void; /** * @description 调用控件事件,一般只有有自定义事件的时候才需要 * * @param name 事件的名称 * @memberof AbstractValueControlBase */ callEvent(name: string, thisArg?: any, ...argArray: any[]): void; /** * @description 获取控件的验证器,根据控件model中的验证器设置获取验证器 * * @returns 验证器集合 * @memberof AbstractValueControlBase */ getValidators(controlValidatorService: ControlValidatorService): Array; /** * @description 验证所有验证器 * * @returns * @memberof AbstractValueControlBase */ validate(): void; /** * @description 根据验证器的验证时刻,验证验证器。 * 验证器会在验证完同步验证器后,才会验证异步验证器。如果有同步验证器验证不通过,异步验证器也不会验证 * @param validatorMoment 验证时刻 * @returns * @memberof AbstractValueControlBase */ validateAtMoment(validatorMoment: ControlValidateMoment): void; /** * 广播控件值改变 * * @memberof AbstractValueControlBase */ broadControlValueChange(broadCascadeValueChange?: boolean): void; /** * 广播控件广播事件 * */ broadControlBroadCast(name: string, value: any): void; /** * * 发送值改变 */ broadValueChange(): void; /** * * 控件完成全部校验 */ stateChanged(valid: boolean): void; /** * 触发值改变事件(广播) * */ valueChange(event?: any): void; /** * 获取关联默认实体属性值 */ getDefaultEntityAttribute(): string; /** * @description 处理不是用angular方式的值改变。当我们用其他第三方方式改变了元素的dom值后,angular捕捉不到修改后的值。 * 为了避免两边数据不一致,这个时候就需要将dom中的值和绑定的元素的angular的model值进行同步。 * @memberof AbstractValueControlBase */ protected handleValueChangeNotByAngularWay(): void; /** * @description 返回元素的孩子节点 * * @param element 父元素 * @returns 子节点集合 * @memberof AbstractValueControlBase */ private getElementChildren; /** * @description 判断两个值是否相等,处理了当modelValue是number的情况下值比对不正确的情况 * * @param value * @param modelValue * @returns 是否相等 true相等,false不等 * @memberof AbstractValueControlBase */ private isEqual; /** * @description 将控件事件添加到自定义事件,这个是要用自定义事件的时候使用 * * @param event 控件事件 * @returns 是否添加成功 * @memberof AbstractValueControlBase */ private addToCustomEvent; /** * 获取级联根据url取值防抖时间 默认50ms * 组件本身的配置-》全局配置-》默认值值 */ private getCascadeDataByUrlDebounceDueTime; }