在 Angular 5 中定义表单验证器的方式有误吗?
Wrong way of defining form validators in Angular 5?
我以 Angular 应用程序的形式使用单独的控件验证器,它们运行良好。现在,我想添加一个验证器来检查控件的值是否小于其他控件的值,并且我读到我必须将验证器应用于控件的父级(FormGroup 本身)。
所以,我做了一些测试,你可以在下面的 stackblitz 中看到:
https://stackblitz.com/edit/angular-mts2gq
我确定 sourcePortsValidator
和 destPortsValidator
有问题,因为它们没有按预期工作。例如,看看这个截图:
和控制台:
表示start
是20,end
是120,比较start>end
是true
。有点奇怪,不是吗?定义这些验证器的正确方法是什么?
提前致谢,
简答:
在你的HTML中,更改源端口开始和源端口结束的类型 个输入框到 number
。
长答案:
text
的输入类型 return 它们的值为 string
所以 start > end
实际上比较端口号为 string
(按字典顺序)。参见 Why is one string greater than the other when comparing strings in JavaScript?。
我以 Angular 应用程序的形式使用单独的控件验证器,它们运行良好。现在,我想添加一个验证器来检查控件的值是否小于其他控件的值,并且我读到我必须将验证器应用于控件的父级(FormGroup 本身)。
所以,我做了一些测试,你可以在下面的 stackblitz 中看到:
https://stackblitz.com/edit/angular-mts2gq
我确定 sourcePortsValidator
和 destPortsValidator
有问题,因为它们没有按预期工作。例如,看看这个截图:
和控制台:
表示start
是20,end
是120,比较start>end
是true
。有点奇怪,不是吗?定义这些验证器的正确方法是什么?
提前致谢,
简答:
在你的HTML中,更改源端口开始和源端口结束的类型 个输入框到 number
。
长答案:
text
的输入类型 return 它们的值为 string
所以 start > end
实际上比较端口号为 string
(按字典顺序)。参见 Why is one string greater than the other when comparing strings in JavaScript?。