2013-06-21 11 views
10

Staramy się, aby AngularJS umiędzynarodowiło wartości <input type='number' />.Czy możliwa jest internalizacja danych liczbowych AngularJS?

Zawarliśmy plik lokalizacyjny (np. angular-locale_it-it.js), ale wartości są nadal wyświetlane w języku angielskim.

To jest problem, ponieważ nasz back-end (i zarządzanie) oczekuje, że wartości liczbowe będą występować w ustawieniach narodowych użytkownika, a odbieranie 123.45 zamiast 123,45 powoduje błąd.

Możesz znaleźć przykład on jsFiddle.

To działa w Chrome 27

Screenshot of the result in Chrome

ale to nie działa w Firefoksie 21 i Internet Explorer 10.

Screenshot of the result in Firefox

+3

biegnę do tego samego problemu dla formatowania Niemcy waluty na wejściach. – Lucas

Odpowiedz

3

To nie może być odpowiedź chcesz, ale może to ci trochę pomaga:

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

Za pomocą dyrektywy można pobrać dane wejściowe, przeanalizować je, a następnie umieścić w zmiennej $scope. Proszę zobaczyć: http://docs.angularjs.org/api/ng.directive:ngModel.NgModelController ($parsers i $formatters. Wziąłem go od: Using angularjs filter in input element).

Dyrektywa może szukać przecinka i zastąpić go kropką. To może wyglądać następująco:

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 

     } 
    }; 
}); 

Pole wejściowe:

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

Należy również pamiętać, że wejście jest teraz pole tekstowe. Spójrz na to: http://jsbin.com/iyurol/1/

Dane wejściowe to pole liczbowe. Ale wpisz 11,5, a wyświetli się ùndefined (zauważ, że mieszkam w Niemczech i używamy przecinki). Przeglądarka nie "prawidłowo" analizuje numeru, jeśli nie jest zapisana kropką, nawet jeśli mieszkasz w regionach z przecinkami ...

Proszę, popraw mnie, jeśli coś jest nie w porządku;)

0

Jako typ danych do sformatowania zwykle jest liczba nie powinniśmy przekonwertować liczbę na ciąg przed wywołaniem replace()? Wystąpił błąd, gdy dane modelu mają wartość liczbową. Poniższe działa lepiej:

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