Angular 2被动表单自定义验证程序未设置错误类型
我已经创建了一个自定义验证器,它将日期和时间控件的验证结合起来,以检查(组合)结果是否在将来。这是完美的工作。但是,我似乎无法设置错误类型,以便使用Angular 2被动表单自定义验证程序未设置错误类型,angular,angular2-forms,Angular,Angular2 Forms,我已经创建了一个自定义验证器,它将日期和时间控件的验证结合起来,以检查(组合)结果是否在将来。这是完美的工作。但是,我似乎无法设置错误类型,以便使用hasError(…)检查此特定验证失败 下面是验证器: export class CustomValidators { static isNotInTheFuture(other: AbstractControl, type: string, formatDate: string, formatTime: string) {
hasError(…)
检查此特定验证失败
下面是验证器:
export class CustomValidators {
static isNotInTheFuture(other: AbstractControl, type: string, formatDate: string, formatTime: string) {
return function (validated) {
return new Promise((resolve, reject) => {
var dateTime: moment.Moment;
if (type === 'date') {
dateTime = moment(other.value + ' ' + validated.value, formatDate + ' ' + formatTime);
} else if (type === 'time') {
dateTime = moment(validated.value + ' ' + other.value, formatDate + ' ' + formatTime);
} else {
reject({ isNotInTheFuture: 'type must be either "date" or "time".' });
}
if (dateTime.isAfter(moment())) {
resolve({ isNotInTheFuture: false });
}
else {
resolve(null);
}
});
};
};
}
在我看来,我得到了
<div class="datepicker md-form-control">
<md-input readOnly type="text" placeholder="Date" myDatePicker (change)="dateChange($event)" [format]="formatDate" formControlName="date">
</md-input>
<small *ngIf="form.controls.date.hasError('isNotInTheFuture')" class="ui error-message" [style.color]="theme.pick('warn')">
Date is in the future..
</small>
</div>
日期在将来。。
下面是我如何设置控件的
this.form = this.formBuilder.group({
...other controls...
})
let now= moment().toDate();
let date = new FormControl(...initial value...);
let time = ...
...
date.setValidators([
<any>Validators.required,
CustomValidators.isNotInTheFuture(time, time, this.formatDate, this.formatTime)
]);
time.setValidators([
...
]);
this.form.addControl('date', date);
this.form.addControl('time', time);
this.form=this.formBuilder.group({
…其他控件。。。
})
现在让我们=力矩().toDate();
let date=新表单控件(…初始值…);
让时间=。。。
...
date.setValidators([
需要验证器,
CustomValidators.isnotinFuture(时间,时间,this.formatDate,this.formatTime)
]);
time.setValidators([
...
]);
此.form.addControl('date',date);
this.form.addControl('time',time);
问题是,验证错误消息从未显示,尽管我确保验证确实失败(验证器中有几个console.log(…)
语句)
然后我检查了Angular 2源代码,这些hasError()
的验证错误似乎存储在控件的\u errors
属性中,因此我检查了该属性,其中也没有错误,这就是为什么hasError()
默认为false
那么我的问题是,我哪里出错了 我认为你不应该把扔进验证器。只需返回一个错误对象。您使用的Angular2版本是什么?目前是RC5。很可能这是异步验证程序的错误。好的,谢谢Günter,我会检查同步版本。我认为您不应该
在验证程序中抛出。只需返回一个错误对象即可。您使用的Angular2版本是什么?目前是RC5。这可能是异步验证程序的错误。好的,谢谢Günter,我将检查同步版本。