angular - 验证器指令正在捕获旧输入值而不是新输入值
问题描述
每当发生更改时,我都会尝试触发对dateStart
输入字段的验证,如下所示:
mycomponent.component.html
<input name="dateStart" type="text"
[(ngModel)]="contract.startDate"
(ngModelChange)="onStartDateChange($event)" [ngModelOptions]="{updateOn: 'change'}"
#dateStart="ngModel" myDateValidator
[dateStart]="contract.startDate" [dateEnd]="contract.endDate"
class="datepicker-input datepicker-border"
style="width:100%" bsDatepicker required>
mycomponent.component.ts
onStartDateChange(event) {
if(event) {
this.contract.startDate = event;
}
}
我的日期验证器.directive.ts
import { Directive, Input } from '@angular/core';
import { Validator, AbstractControl, NG_VALIDATORS } from '@angular/forms';
@Directive({
selector: '[myDateValidator]',
providers: [{provide: NG_VALIDATORS, useExisting: DateValidator, multi: true}]
})
export class DateValidator implements Validator {
@Input() dateStart: Date;
@Input() dateEnd: Date;
constructor() { }
validate(c: AbstractControl): { [key: string]: any } | null {
if (!c || !(c.value)) {
return null;
}
if (this.dateEnd < this.dateStart) {
return {myDateValidator: false};
}
return null;
}
}
然而,似乎onStartDateChange()
在验证发生之前触发了事件处理程序并且contract.startDate
实际更新了,验证器指令dateStart
Input 在触发验证过程时始终捕获旧值而不是新值。已经存在关于相同问题的类似线程。请提供任何帮助将非常受欢迎。
解决方案
你可以尝试(keyPress)事件而不是(ngModelChange)
推荐阅读
- c++ - OpenCv MOG2 Backgroundsubtraction 函数在 C++ 上运行不佳
- html - HTML / CSS div ::为什么height:auto = 0?
- r - 并排 kables 返回“不在外部标准模式”
- firebase - 来自 firebase 的 Flutter 图像网格(instagram 风格)
- php - 小数的自定义样式会破坏默认的 WooCommerce 计算
- node.js - 如何使用 nodejs 中的发现来强制执行背书策略?
- java - 如何在 Java 中以不同的方式读取矩阵数组?
- java - 在 groovy/java 中从 csv 中删除列
- javascript - javascript 中 Math.random() 中用于生成伪随机数的初始种子是什么?
- javascript - React.js 使用输入类型文件预览图像