diff --git a/packages/cdk/forms/__tests__/formControl.spec.ts b/packages/cdk/forms/__tests__/formControl.spec.ts index 2d6b8882a..af1ab7349 100644 --- a/packages/cdk/forms/__tests__/formControl.spec.ts +++ b/packages/cdk/forms/__tests__/formControl.spec.ts @@ -173,4 +173,36 @@ describe('formControl.ts', () => { expect(control.hasError('required')).toEqual(false) }) }) + + describe('trim work', () => { + let control: FormControl + + test('default trim work', () => { + control = new FormControl('') + + expect(control.getValue()).toEqual('') + + control.setValue('test ') + + expect(control.getValue()).toEqual('test ') + + control.setValue(' test ') + + expect(control.getValue()).toEqual(' test ') + }) + + test('trim enable work', () => { + control = new FormControl('', { trim: true }) + + expect(control.getValue()).toEqual('') + + control.setValue('test ') + + expect(control.getValue()).toEqual('test') + + control.setValue(' test') + + expect(control.getValue()).toEqual('test') + }) + }) }) diff --git a/packages/cdk/forms/docs/Index.zh.md b/packages/cdk/forms/docs/Index.zh.md index 6bcc21a6c..3c736e5bc 100644 --- a/packages/cdk/forms/docs/Index.zh.md +++ b/packages/cdk/forms/docs/Index.zh.md @@ -91,6 +91,7 @@ export function useFormControl( | `disabled` | 默认禁用当前控件 | `boolean` | - | - | | `name` | 控件的名称 | `string` | - | 通常用于自定义提示信息 | | `trigger` | 验证器触发的时机 | `'change' \| 'blur' \| 'submit'` | `change` | - | +| `trim` | 是否去除首尾空字符串 | `boolean` | - | 默认不去除 | | `validators` | 一个同步验证器函数或数组 | `ValidatorFn \| ValidatorFn[]` | - | - | | `asyncValidator` | 一个异步验证器函数或数组 | `AsyncValidatorFn \| AsyncValidatorFn[]` | - | - | diff --git a/packages/cdk/forms/src/controls.ts b/packages/cdk/forms/src/controls.ts index b2161d64c..01f39a471 100644 --- a/packages/cdk/forms/src/controls.ts +++ b/packages/cdk/forms/src/controls.ts @@ -145,6 +145,15 @@ export abstract class AbstractControl { return this._trigger ?? this._parent?.trigger ?? 'change' } + /** + * Whether to remove the first and tail space + * Possible value: true | false + * Default value: false + */ + get trim(): boolean { + return this._trim ?? this._parent?.trim ?? false + } + name?: string protected _controls: Ref @@ -160,6 +169,7 @@ export abstract class AbstractControl { private _asyncValidators: AsyncValidatorFn | undefined private _parent: AbstractControl | undefined private _trigger?: TriggerType + private _trim?: boolean constructor( controls?: GroupControls | AbstractControl>[], @@ -428,6 +438,7 @@ export abstract class AbstractControl { if (isOptions(validatorOrOptions)) { this.name = validatorOrOptions.name this._trigger = validatorOrOptions.trigger ?? this._trigger + this._trim = validatorOrOptions.trim ?? this._trim this._validators = toValidator(validatorOrOptions.validators) this._asyncValidators = toAsyncValidator(validatorOrOptions.asyncValidators) if (validatorOrOptions.disabled) { @@ -533,7 +544,7 @@ export class FormControl extends AbstractControl { } getValue(): T { - return this._valueRef.value + return this.trim ? (this._valueRef.value as any).trim() : this._valueRef.value } protected _forEachControls(_: (v: AbstractControl, k: never) => void): void {} diff --git a/packages/cdk/forms/src/types.ts b/packages/cdk/forms/src/types.ts index 433be1125..0d2ba90e7 100644 --- a/packages/cdk/forms/src/types.ts +++ b/packages/cdk/forms/src/types.ts @@ -40,6 +40,7 @@ export interface ValidatorOptions { disabled?: boolean name?: string trigger?: TriggerType + trim?: boolean validators?: ValidatorFn | ValidatorFn[] asyncValidators?: AsyncValidatorFn | AsyncValidatorFn[] }