循环使用指令和ng-change Angular JS

时间:2016-05-04 20:05:55

标签: javascript angularjs

我有下一个问题,我在Angular JS中创建了一个指令来检查输入是否是一个数字,如果不是数字,则必须设置正确的值。这是我的指令代码:

app.directive('numberValidate', function(){
    return {
        require: 'ngModel',
        link: function($scope, element, attr, modelCtrl){

            modelCtrl.$parsers.push(function (inputValue){

                var transformedInput = parseInt(inputValue); 

                if (transformedInput!=inputValue) {
                   modelCtrl.$setViewValue(transformedInput);
                   modelCtrl.$render();
                }
                return transformedInput;                
            });
        }
    };
});

另外,当用户停止使用typping发送请求时,我需要监听。要在停止时收听,我已将ng-model-options="{debounce: 750}"添加到字段中,就像在下一个代码中一样:

<input type="text" ng-change="sendChecker()" ng-model="identification" ng-model-options="{debounce: 750}" number-validate>

sendChecker函数将我的请求发送到服务器,一切正常工作当我写一个像12345这样的数字或者我输入一个带有字符12345a的数字时,它被转换为数字和设置在输入中,问题是当我写一个字母a时,这会创建一个循环。我怎么能避免这个?

任何建议都会被贬低。

2 个答案:

答案 0 :(得分:2)

为什么不使用ng-pattern验证输入?

<input type="text" ng-pattern=/^[0-9]+$/ ng-model="identification" ng-model-options="{debounce: 750}">

或者您可以使用输入类型number

 <input type="number" ng-model="identification" ng-model-options="{debounce: 750}">

那么你不必自己验证一些东西吗?

修改

在以下示例中,仅在用户插入有效值

时才调用sendChecker()
<form name="myform">
     <input type="number" name="myinput" ng-changed="myform.myinput.$valid ? sendChecker(identification) : " ng-model="identification" ng-model-options="{debounce: 750}">
</form>

答案 1 :(得分:0)

因为operator->()你进入循环。所以你需要过滤掉字符串中的非数字。