angularjs - Angular $解析器: why is a SPACE disregarded when typed into this INPUT element?

标签 angularjs directive

我正在调试器中查看下面的指令。我在注释掉的行下方的行上设置了一个断点,位于 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/

相关文章:

javascript - 一种以 Angular 绑定(bind)到对象的方法

javascript - 使用 Angular 将请求传递到 DJANGO REST api,然后在 DJANGO View 中返回这些结果

css - 将 css 放在 templateURL 指令中

javascript - Angularjs:如何将范围变量传递给指令?

javascript - 加载文件时显示加载指令

latex - 警告中的 tabularcolumns 指令未显示在 latex 中

javascript - 没有从 promise 中抛出 Angular 错误最终被阻止

angularjs - 可以禁用 $locationProvider 和 $routeProvider 吗?

javascript - 重新加载页面后标记消失: AngularJS

html - 将 CSS 应用到 AngularJS 指令元素标签