Ich versuche, eine Direktive zu erstellen, die nur Zahlen oder Dezimalzahlen abhängig von dem Attribut akzeptiert, das ich in meine Eingabe einfüge, das Problem ist mit der Deklaration der Dezimalstellen.
Beispiel: Wenn ein Benutzer was nur dieser Eingang int Zahlen enthält, ist es wie
<input only-number type-num="int">
Fall wäre der Benutzer nur Dezimalstellen die Eingabe wie
<input only-number type-num="decimal" maxDecimalPoints="2">
wäre aber jetzt muss ich $Num und MaxDecimalPoints beobachten, kann ich $ ineinander beobachten beobachten? Wie kann ich es schaffen?
Hier ist meine Richtlinie:
angular.module('app')
.directive('onlyNumber', function(){
return {
require: '?ngModel',
link: function(scope, element, attrs, ngModelCtrl) {
if(!ngModelCtrl) {
return;
}
// Only Int Numbers
attrs.$observe('typeNum', function(value){
if(value == "int"){
ngModelCtrl.$parsers.push(function(val) {
if (angular.isUndefined(val)) {
var val = '';
}
var clean = val.replace(/[^0-9]+/g, '');
if (val !== clean) {
ngModelCtrl.$setViewValue(clean);
ngModelCtrl.$render();
}
return parseInt(clean);
});
}
});
// Only Decimal
attrs.$observe('typeNum', function(value){
if(value == "decimal"){
// Now Check limit of decimal places
}
});
element.bind('keypress', function(event) {
if(event.keyCode === 32) {
event.preventDefault();
}
});
}
};
});
viel zusätzliche Arbeit, wenn Sie gerade 'ng-Muster verwenden könnte 'und übergeben Muster als Variable – charlietfl
, aber die Idee ist nicht, Fehler in der Validierung zu zeigen, ist nicht in der Lage, den Benutzer in der Lage, mehr Buchstaben einfügen, warum ich nicht ng-Muster verwendet und auch, weil in der Lage, mehr Verhaltensweisen zu implementieren –
Beachten Sie, dass 'maxDecimalPoints' Attribut 'max-Dezimal-Punkte' sein muss – charlietfl