2016-05-25 7 views
0

Ich muss eine Attributrichtlinie schreiben mit Angular 1.5.5, die im Wesentlichen Eingaben bei Tastendruckereignis des Textfelds einschränkt. So sollte es so aussehenAttribut Direktive Zugriffselement und Hinzufügen eines Listners

<input type="number" name="age" id="age" restrict-char="['e','-']" /> 

Wie können wir ein Attribut Richtlinie ohne Link-Funktion schreiben. Ich möchte nicht Linkfunktion verwenden, da ich meine Code-Basis zu Angular 2.0 portieren werde und Verbindungsfunktionen dort nicht unterstützt werden.

+0

Können Sie nicht benutzen Sie einfach 'pattern' bei der Eingabe? – charlietfl

+0

Ja, ich habe es versucht, ng-Muster funktioniert nicht auf Tastendruck. Das bedeutet, dass ich allen Textfeldern einen Ereignislistener hinzufügen muss, wo immer ich diese Eingabe einschränken muss. – ATHER

Antwort

1

Nicht sicher, ob das ist, was Sie wollen, aber Sie können $ Parser für ngModelController verwenden und ng-model-options für die Aktualisierung bei jedem Ereignis einstellen.

angular.module('app', []); 
 

 
angular.module('app').directive('restrictChar',() => { 
 
    return { 
 
    restrict: 'A', 
 
    require: 'ngModel', 
 
    scope: { 
 
     restricted: '=restrictChar' 
 
    }, 
 
    controller: function ($scope, $element) { 
 
     const ngModel = $element.controller('ngModel'); 
 
    
 
     ngModel.$parsers.unshift((value) => { 
 
     const newVal = value 
 
      .split('') 
 
      .filter((char) => $scope.restricted.indexOf(char) === -1) 
 
      .join(''); 
 
     
 
     $element.val(newVal); 
 
     
 
     
 
     return newVal; 
 
     }); 
 
    } 
 
    }; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script> 
 
<div ng-app="app"> 
 
    <input type="text" ng-model="x" name="age" id="age" restrict-char="['e','-']" ng-model-options="{updateOn: 'keyup'}" /><br> 
 
    {{x}} 
 
</div>

+0

Vielen Dank für Ihre Antwort, aber ich kann immer noch das '-' und 'E' in Ihrem Codebeispiel eingeben, aber ich denke, Sie sind in der Nähe..sehr nahe – ATHER

+0

@ATHER sollte es jetzt in Ordnung sein – sielakos

Verwandte Themen