在 Angular 5 中定义表单验证器的方式有误吗?

Wrong way of defining form validators in Angular 5?

我以 Angular 应用程序的形式使用单独的控件验证器,它们运行良好。现在,我想添加一个验证器来检查控件的值是否小于其他控件的值,并且我读到我必须将验证器应用于控件的父级(FormGroup 本身)。

所以,我做了一些测试,你可以在下面的 stackblitz 中看到:

https://stackblitz.com/edit/angular-mts2gq

我确定 sourcePortsValidatordestPortsValidator 有问题,因为它们没有按预期工作。例如,看看这个截图:

和控制台:

表示start是20,end是120,比较start>endtrue。有点奇怪,不是吗?定义这些验证器的正确方法是什么?

提前致谢,

简答:

在你的HTML中,更改源端口开始源端口结束的类型 个输入框到 number

长答案:

text 的输入类型 return 它们的值为 string 所以 start > end 实际上比较端口号为 string(按字典顺序)。参见 Why is one string greater than the other when comparing strings in JavaScript?