2013-06-21 4 views
10

Wir versuchen, AngularJS <input type='number' /> Werte zu internationalisieren.Ist es möglich AngularJS numerische Eingaben zu internationalisieren?

Wir haben die Lokalisierungsdatei hinzugefügt (z. B. angular-locale_it-it.js), aber die Werte werden weiterhin in der englischen Ländereinstellung angezeigt.

Dies ist ein Problem, da unser Back-End (und Management) numerische Werte im Gebietsschema des Benutzers erwartet und der Empfang von 123.45 anstelle von 123,45 einen Fehler verursacht.

Sie können ein Beispiel on jsFiddle finden.

Es funktioniert in Chrome 27

Screenshot of the result in Chrome

aber es funktioniert nicht in Firefox 21 und Internet Explorer 10.

Screenshot of the result in Firefox

+3

in die gleiche Ausgabe Ich laufe für Deutschland Währung Formatierung auf Eingaben: Es sollte durch das lang Attribut angesteuert werden. – Lucas

Antwort

3

Dies ist nicht die Antwort sein, möchten Sie vielleicht, aber vielleicht es hilft Ihnen ein wenig:

JsBin: http://jsbin.com/iyulaj/1/

Mit einer Direktive können Sie die Daten der Eingabe nehmen, parsen und dann an die Variable $scope übergeben. Bitte sehen Sie: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController ($parsers und $formatters. Ich nahm es von: Using angularjs filter in input element).

Die Direktive könnte nach einem Komma suchen und es durch einen Punkt ersetzen. Es könnte wie folgt aussehen:

angular.module('MyModule').directive('numberinput', function() { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, element, attrs, ngModelController) { 

      ngModelController.$parsers.push(function(data) { 
       //convert data from view format to model format 
       return data.replace(',', "."); //converted 
      }); 

      ngModelController.$formatters.push(function(data) { 
       //convert data from model format to view format 
       return data.replace('.', ","); //converted 
      }); 

      // http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController 

     } 
    }; 
}); 

Das Eingabefeld:

<input ng-model='value' type='text' numberinput='' /> 

Beachten Sie auch, dass der Eingang ist nun ein Textfeld ein. Schau dir das an: http://jsbin.com/iyurol/1/

Die Eingabe ist ein Zahlenfeld. Aber geben Sie 11,5 ein und es wird ausgegeben ùndefined (beachten Sie, dass ich in Deutschland lebe und wir die Komma-Notation verwenden). Der Browser "parst" also die Nummer nicht korrekt, wenn sie nicht in Punktnotation vorliegt, auch wenn Sie in Regionen mit Komma-Notation leben ...

Bitte korrigieren Sie mich, wenn da etwas nicht stimmt;)

0

Als Typ der zu formatierenden Daten ist in der Regel eine Zahl sollte nicht wir die Zahl in eine Zeichenfolge vor dem Aufruf replace() konvertieren? Ich habe einen Fehler erhalten, wenn Modelldaten einen numerischen Wert haben. Folgende Arbeiten besser:

 ngModelController.$formatters.push(function(data) { 
      //convert data from model format to view format 
      return (''+data).replace('.', ","); //converted 
     }); 
Verwandte Themen