Pregunta

Tengo una directiva personalizada, realizada después de filtros En el modelo NG en una entrada , que restringe la entrada solo para los dígitos:

     .directive('onlydigitinput', function () {
    return {
        require: 'ngModel',
        link: function (scope, element, attrs, modelCtrl) {
            modelCtrl.$parsers.push(function (inputValue) {
                var transformedInput = inputValue.toLowerCase().replace(/ /g, '')
                  .replace(/[^0-9]+/g, '');
                if (transformedInput != inputValue) {
                    modelCtrl.$setViewValue(transformedInput);
                    modelCtrl.$render();
                }
                return transformedInput;
            });
        }
    };
})

funciona muy bien, pero se usa junto con, aparentemente, la directiva estándar requerida, comienza a fallar.

Utilizo el siguiente HTML (Sintaxis de JADE):

input(type='text' , required, onlydigitinput,  min='1', max='99', maxlength='2')

(No utilizo el tipo= 'Número' a medida que se meta con MAXLENGHT: MaxLength ignorado para el tipo de entrada=" Número "en Chrome , y también ignora mi directiva también)

Cuando entro dígitos, funciona bien. El campo es válido. Cuando intento ingresar el dígito y luego una letra, funciona bien: el campo es válido, y no puedo ingresar el no dígito. Pero cuando empiezo de no dígito, el campo no es válido, pero todavía puedo ingresar letras, que se acompaña del siguiente error:

TypeError: Cannot read property 'toLowerCase' of undefined
at http://localhost:3000/scripts/core/directives/systemDirectives.js:63:54

Refiriéndose al uso de la banda de tolower en la directiva anterior. Conseje cómo puedo borrar este error y hacer que mi directiva funcione bien también en este último caso y evite el error.

¿Fue útil?

Solución

Usted tiene un validador de campo requerido en el campo de entrada.Por lo tanto, cuando configura el campo en blanco (""), ocurre cuando escribe el no dígito.El valor se convierte en indefinido .

var transformedInput = inputValue.toLowerCase().replace(/ /g, '')
              .replace(/[^0-9]+/g, '');
            if (transformedInput != inputValue) {
                modelCtrl.$setViewValue(transformedInput);
                modelCtrl.$render();
            }

Agregue el siguiente código superior del código anterior:

if(!inputValue) return ;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top