Ich schrieb zwei Direktiven. Einer von ihnen ist für die Eingabe von Zahlen mit Einheiten (wie „1m“) verwendet:Problem mit zwei Direktiven auf dem gleichen Modell
angular.module('ng', [])
.directive('unit', function() {
return {
require: 'ngModel',
link: function (s, e, attributes, ngModel) {
ngModel.$parsers.push(function (i) {
return i + attributes.unit;
});
ngModel.$formatters.push(function (i) {
return (i + '').replace(attributes.unit, '');
});
}
}
});
Die zweite ersetzt ,
mit .
, weil viele Menschen in Europa eine Dezimalzahl verwenden Komma statt Dezimalpunkt und ich möchte, dass meine Werte, die normalisiert werden sollen.
angular.module('ng', [])
.directive('numberWithPoint', function() {
return {
require: 'ngModel',
link: function (s, e, attributes, ngModel) {
ngModel.$parsers.push(function (i) {
return i.replace(',', '.');
});
}
}
});
Die Verwendung wäre:
<input type="text" ng-model="howLongSomethingIs" unit="m" number-with-point /> m
Das Problem: die Richtlinie unit
funktioniert gut, wenn sie allein ist, wenn ich die number-with-point
Richtlinie hinzufügen, nimmt die unit
keine Wirkung (der angezeigte Wert für Beispiel 1m
nicht 1
.
ich habe versucht, mit dem priority
Eigenschaft innerhalb der return
Objekt vermasselt, aber nichts geschah.
Wie können diese beiden Direktiven zusammenarbeiten?
In diesem jsfiddle scheint es zu funktionieren, aber es verwendet Angular 1.2.1. Ich benutze Angular 1.3.14. Weiß jemand, wie man Jsfiddle andere Version benutzt?
Könnten Sie einen Plunker/jsbin der beiden Direktiven verdrahten? Das würde sicherlich helfen, es zu debuggen. –
Ok, gute Idee. Warte eine Sekunde –
Siehe Bearbeiten. Ich habe einige Kommentare hinzugefügt –