如何为带 trailing/leading 空格的输入启用 angularjs 1.0.x 验证指令?

How to enable angularjs 1.0.x validation directive for inputs with trailing/leading spaces?

我有一个使用正则表达式验证文本输入的指令。我想禁止用户输入 space 个字符。该指令适用于 spaces 内部文本,但当用户输入尾随或前导 spaces 时,验证不会触发。我知道 angular 自动 trims 文本输入,但我不能使用 ng-trim = "false" 指令,因为我的 angularjs 版本是 1.0 .6.有办法解决这个问题吗?

我已经尝试了 How to disable trimming of inputs in AngularJS? 对 angular 1.0.x 的建议,它部分有效 - 当用户粘贴包含尾随 space 的值时调用验证s,用"ctrl+v"或者鼠标,但是键盘输入还是没有触发验证。

自定义 ngTrim 指令,部分有效:

app.directive('ngTrim', function() {
    return {
        require: 'ngModel',
        priority: 300,
        link: function(scope, iElem, iAttrs, ngModel) {
            if (iAttrs.ngTrim === 'false') {
                ngModel.$parsers.unshift(function() {
                    return iElem.val();
                });
            }
        }
    }
});

如果您唯一想做的就是禁止输入空格,您可以将输入侦听器直接附加到元素,并在输入时删除空格,如下所示:

iElem.bind('input', (eventData) => {
  if (eventData.data == ' ') {
    iElem.val(iElem.val().replace(/\s/g, ''));
  }
});

http://jsfiddle.net/2n6m8gtz/