【问题标题】:angular2- formbuilder, validators and testing end date is greater then start dateangular2-formbuilder、验证器和测试结束日期大于开始日期
【发布时间】:2016-08-16 15:42:15
【问题描述】:

我的html有一个开始和结束日期输入标签

我使用有角度的 FormBuilder 和自定义验证器来确保开始日期和结束日期有效。

在我的组件中,这里是我的 sn-p:

this.form = fb.group({
            startdate: ['',Validators.compose([Validators.required,ModelValidators.validStartDate])],
            enddate: ['',Validators.compose([Validators.required,ModelValidators.validEndDate])],

        });

这是我的验证器:

static validStartDate(control: Control){
        var valid: any;
        valid=null;
        var diff:any;
        diff = new Date(control.value).valueOf() - new Date('1999-01-01').valueOf();
        if (diff>=0){
            valid=true;
        }
        return valid ? null : { validStartDate: true };

    }

    static validEndDate(control: Control){
        var valid: any;
        valid=null;
        var diff:any;
        diff = new Date().valueOf() - new Date(control.value).valueOf();
        if (diff>3600*24){
            valid=true;
        }
        return valid ? null : { validEndDate: true };
    }

现在..如何验证结束日期大于开始日期以及结束日期 - 开始日期大于 1 年?

例如是否可以将其他数据传递给 ModelValidators.validEndDate 函数?

【问题讨论】:

  • 否,但验证器不必是静态静态方法。如果不是,它可以访问this.form,以及startdate控件

标签: angular typescript


【解决方案1】:

这样做

this.form = fb.group({
   startdate: ['',Validators.compose([Validators.required,ModelValidators.validStartDate])],
   enddate: ['',Validators.compose([Validators.required,ModelValidators.validEndDate])],
        },{validator: this.validateDates}));

然后在你validator class 中创建函数

validateDates(group: ControlGroup) {
  var valid = false;

  for (name in group.controls) {
    var val = group.controls[name].value

    (...)
  }

  if (valid) {
    return null;
  }

  return {
    areEqual: true
  };
}

查看question了解更多详情

【讨论】:

    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多