ngModelController解析管道的行为似乎在角1.2和1.3之间发生了变化.我现在总是看到一个名为“parse”的新的验证键被添加到所有的$error对象中,并且每当一个解析器返回未定义时,它将覆盖/替换可能已经设置的所有其他验证键.
@H_404_14@例如,这里是一个例子,在角度1.2.23中 – 尝试输入一个超出范围的数字:
http://jsfiddle.net/8doq0saf/5/
在1.3-rc下运行的同样的事情给出了不同的结果:
http://jsfiddle.net/1t52s9b2/4/
我还没有找到关于这个变化的任何文件.解析密钥的目的是什么?如何更改代码以恢复旧的行为?
angular.module('app',[]).directive('number',function () { return { require: 'ngModel',link: function (scope,elem,attrs,ctrl) { // valid number ctrl.$parsers.push(function (value) { var valid = angular.isUndefined(value) || value === '' || isFinite(value); ctrl.$setValidity('number',valid); return valid ? angular.isUndefined(value) || value === '' ? undefined : Number(value) : undefined; }); ctrl.$parsers.push(function (value) { if (!angular.isDefined(attrs.minNumber)) { return value; } var valid = angular.isUndefined(value) || Number(value) >= Number(attrs.minNumber); ctrl.$setValidity('minNumber',valid); return valid ? value : undefined; }); ctrl.$parsers.push(function (value) { if (!angular.isDefined(attrs.maxNumber)) { return value; } var valid = angular.isUndefined(value) || Number(value) <= Number(attrs.maxNumber); ctrl.$setValidity('maxNumber',valid); return valid ? value : undefined; }); } }; });