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,我将检查同步版本。