我有一个模板驱动的表单,该表单具有一个输入控件,我需要使用一个自定义验证程序对我模型中的属性值进行验证(该属性根据下拉列表中的选择而动态变化)。每当我输入输入控件时,它都可以正常工作,但是我希望在属性值更改时也可以进行验证(而不必在输入框中更改值)。有办法实现吗?
下面是我使用的模型,标记和验证器的简化版本
型号:
amountToInvest: number = null;
public onAccountSelectionChanged(event): void {
// find the account based on the selection from this drop down list
this.availableFunds = account.AvailableFunds;
}
标记
<form name="form" (ngSubmit)="myForm.form.valid && onSubmit()" >
<input type="number" [(ngModel)]="amountToInvest"' [customMax]="availableFunds">
验证人
@Directive({
selector: '[customMax][formControlName],[customMax][formControl],[customMax][ngModel]',
providers: [{provide: NG_VALIDATORS, useExisting: CustomMaxDirective, multi: true}]
})
export class CustomMaxDirective implements Validator {
@Input()
customMax: number;
validate(c: FormControl): {[key: string]: any} {
let v = c.value;
return ( v > this.customMax)? {"customMax": true} : null;
}
const event = new Event('change', { bubbles: true, cancelable: false }); //Create an event
let siblingInput = ele.parentNode['previousElementSibling']['firstChild'] as HTMLInputElement; //Get the element
siblingInput.dispatchEvent(event); //Dispatch event
这将重新验证控件