2016-10-12 1 views
1

Я взял время, чтобы понять это, но может ли кто-нибудь опубликовать более чистый метод ограничения количества цифр в типе ввода = 'number'. Одна из проблем заключается в том, что ошибки выдаются, если $ scope.variable = null .... ничего не значит в поле ввода., предотвращающий maxLength на тип входного номера

<input type="number" model='modalName' ng-change="monitorLength('modalName',16)"> 

JS:

$scope.monitorLength = function (model,maxLength) { 
    if ($scope[model] != null) { // prevent error on empty input field 
     var len = $scope[model].toString() ; // convert to a string 
     if (len.length > maxLength) { //evaluate string length 
     $scope[model] = parseInt(len.substring(0, maxLength)); 
     // convert back to number or warning is thrown on input value not being a number 
     } 
    } 
    } 

я тогда нужно расширить на этом учитывать только числа, предотвращая любые нецифровые символы включают в себя ". и «» символы:

var reg = new RegExp(/^\d+$/) ; 
    $scope.monitorLength = function (modal,maxLength) { 
    if ($scope[modal] != null) { 
     var len = $scope[modal].toString() ; 
     if (len.length > maxLength) { 
     $scope[modal] = parseInt(len.substring(0, maxLength)); 
     } else if (!reg.test(len)) { 
     $scope[modal] = parseInt(len.substring(0, len.length-2)); 
     } 
    } 
    } 

Есть ли способ извлечь нг-режимные, который был ответственен за вызов нг-изменения? поэтому вызов должен быть только: ng-change="monitorLength(10)". А потом в функции каким-то образом динамически извлекается вызывающий ng-модаль?

+0

Можете ли вы не просто использовать 'min' и' max' [attributes] (http://www.w3schools.com/tags/att_input_max.asp) для элемента ввода? Существует очень мало браузеров, которые не поддерживают это. – Icepickle

+1

Не для угловых, так как он обертывает элементы и связывает их с параметрами ввода в $ scope, которые не работают или игнорируются. – rolinger

ответ

0

это уборщик метод для ограничения числа, используя ngMaxlength для этого:

<input type="number" model='modalName' ng-maxlength="16"> 

Вы можете найти больше атрибутов и информацию here

+0

не будет ли это 'ng-maxlength', поскольку страница, на которую вы ссылаетесь, предлагает? – Icepickle

+0

Извините скопируйте пасту из диаграммы, вы правы ее ng-maxlength –

+2

no, ng-maxlength фактически не мешает пользователю вводить более 16 символов. Только 16 символов хранятся в переменной $ scope.variable ... но визуально пользователь все равно будет видеть более 16 символов. Вышеупомянутый метод - это предотвращение символьного запуска в фактическом поле ввода. – rolinger

0

Есть ли способ извлечь нг-режимный, что отвечал за вызов ng-change?

Да. Вы можете определить директиву и потребовать ngModelController.

.directive('maxNum', function(){ 
    return { 
     require: '^ngModel', 
     link: function($scope, elem, attrs){ 
      // here you can add formatters/parsers to the ngModel 
      // to affect the change on the ngModel.$viewValue. 

     } 
    } 
}) 

Как @rolinger указан на другом ответ, используя встроенный в директивах не будет препятствовать использованию от ввода недействительных символов, они просто пометить модель как быть недействительным.