我正在调试器中查看下面的指令。我在注释掉的行下方的行上设置了一个断点,位于 var TransformedInput = text.replace(/\D/g, '');
当我在输入中输入数字时,例如1、调试器按预期停在断点处。我继续执行。然后我在 INPUT 中输入一个空格,但我们没有进入调试器。就好像输入没有看到空格字符一样。然后我们输入另一个数字,例如3、我们再次停在断点处,text
变量的值为“1 3”,即“1{space}3”。
我不明白这种行为。有人可以解释为什么在输入中输入空格不会导致 fromUser() 函数执行吗?
<input int-Only type="text" maxlength="5" ng-model="qty1" />
foo.directive('intOnly', function () {
return {
require: 'ngModel',
link: function (scope, element, attr, ngModelCtrl) {
function fromUser(text) {
// var transformedInput = text.replace(/[^0-9]*/g, '');
var transformedInput = text.replace(/\D/g, '');
console.log(transformedInput);
if (transformedInput !== text) {
ngModelCtrl.$setViewValue(transformedInput);
ngModelCtrl.$render();
}
return transformedInput;
}
ngModelCtrl.$parsers.push(fromUser);
}
};
});
最佳答案
在 Angular 运行与 ngModelController 关联的任何默认或自定义解析器之前,它会默认修剪所有空格。
请参阅 Angular 源的输入指令中的 baseInputType 函数 - https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js
尝试将 ngTrim 属性设置为 false,然后您的解析器就会被执行。
关于angularjs - Angular $解析器: why is a SPACE disregarded when typed into this INPUT element?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245905/