javascript - 为什么我在 Angular2 中的自定义验证不起作用

标签 javascript angular

这是我编写的两个 Angular2 自定义验证,第一个 validateAge 有效,但第二个 validateDob 无效...区别在于 validateAge 使用我所在的组件,并且是基于文本的字段,第二个需要使用日期输入字段并查找今天的日期和出生日期之间的差异,以找到实际年龄,然后根据年龄字段进行测量。但有些事情是不对的......任何想法

function validateAge(control: FormControl): { [s: string]: boolean } {
  if (parseInt(control.value) <= 0) {
    return {invalidAge: true};
  }
}

function validateDob(control: FormControl): {[s:string]: boolean}{
  var today = new Date();
  var calcAge = today - control.value;
  if (calcAge != parseInt([{age}]) ){
    return {invalidDate: true}
  }
}

最佳答案

这里的问题是您的 control.value 不是 Date 对象,而是字符串表示形式。

var today = new Date();

当前时间戳与输入值之间的毫秒差

var diff = today - new Date(control.value);

除以每年的毫秒数并发言

var calcAge = Math.floor(diff/ (1000*60*60*24*365)));

现在根据适当的值进行所需的任何比较。您没有向我们展示您的年龄对象,所以我实际上不知道您在寻找什么比较。

if (calcAge < someAgeThreshold) ){
    return {invalidDate: true}
} else {
    return null;
}

另请注意,使用自定义验证时,当您返回 null 时,验证器不会返回错误,并且任何具有值的内容都被视为有错误。

关于javascript - 为什么我在 Angular2 中的自定义验证不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976848/

相关文章:

javascript - 如何将阅读更多 - 阅读更少按钮始终放在段落末尾?

javascript - 将 javascript 函数放入其他函数的正确语法

javascript - 无法覆盖 css 类!对内联样式很重要

ios - Angular 2应用程序未在iOS上随Cordova一起加载

javascript - 在呈现 View 之前从父级设置子组件属性

javascript - 当我点击 Angular 中的 <li> 时,如何更改背景颜色?

javascript - 下拉选择图片

Angular 2% 管道输出不正确

javascript - 类型错误 : Cannot read property 'push' of undefined-IONIC2

javascript - 这是新的 ES6 功能吗?