2014-11-27 27 views
7

mam dyrektywę kostium, aby ustawić% rzeczy, na przykład: - Happy: [90] - Sad: [10]

Więc może pozwolić tylko 1 na 100. Więc nie chcę pozwalać na jakiekolwiek postacie itp. I wiem, że mogę używać ng-pattern itp., Ale nie chcę, żeby dodawały nawet taką postać, więc muszę to zrobić.

To działa, ale problem, który mam, polega na tym, że przestrzeń nie uruchamia parserów $, czy istnieje obejście, które uruchamia ją również z przestrzenią?

app.directive('numericOnly', function(){ 
    return { 
     require: 'ngModel', 
     link: function(scope, element, attrs, modelCtrl) { 
      modelCtrl.$parsers.push(function (inputValue) { 

       //Remove all non numeric values 
       var transformedInput = inputValue.replace(/\D/g,''); 

       //Remove all spaces 
       transformedInput = transformedInput.replace(/\s/g, ""); 

       //Remove any leading zero 
       if(transformedInput.substring(0,1) === '0') { 
        console.log('is zero'); 
        if(transformedInput.length === 1) { 
        transformedInput = ''; 
        } else { 
        transformedInput = transformedInput.substring(1, transformedInput.length); 
        } 
       } 

       //Make sure it is not over 100 
       var numberCopy = parseInt(transformedInput); 
       if(!isNaN(numberCopy)){ 
        if(numberCopy > 100) { 
        console.log('bigger than 100'); 
        numberCopy = 100; 
        transformedInput = String(numberCopy); 
        } 
       } 

       //If changes done, then update modelCtrl 
       if (transformedInput!=inputValue) { 
        modelCtrl.$setViewValue(transformedInput); 
        modelCtrl.$render(); 
       } 

       //Return 
       return transformedInput; 
      }); 
     } 
    }; 
}); 

Plunker: http://plnkr.co/edit/oKXExZ8lkHzUSqHKpm1n?p=preview

Odpowiedz

13

kątowa domyślnie przyciąć wartość ngModel. Więc musisz dodać dyrektywę ng-trim do elementu wejściowego, nie pozwala to na spacje po obu stronach łańcucha.

<input type="text" numeric-only="" ng-trim="false" ng-model="nyNumber"/> 

I nie trzeba tę linię anymore

//Remove all spaces 
transformedInput = transformedInput.replace(/\s/g, "");