2014-07-07 9 views
10

Hi kiedy używam znaczniki SPAN mogę zastosować filtr pieniądze jakZastosuj filtr waluty na polu wprowadzania w angularjs

<div ng-repeat="item in items"> 
    <span> 
     {{item.cost | currency}} 
    </span> 
</div> 

Zastanawiam się w jaki sposób można zastosować ten sam filtr waluty w tagu wejściowego. np.

<div ng-repeat="item in items"> 
    <input type="text" ng-model="item.cost | currency" /> 
</div> 

Kiedy próbuję zastosować filtr waluty do pola wprowadzania jak powyżej, to nie działa. Proszę dać mi znać, jak zastosować filtr waluty do pola wejściowego. Dzięki

+1

Sprawdź tę odpowiedź: http://stackoverflow.com/questions/19890364/format-input-value-in-angularjs – karliwson

+0

https://docs.angularjs.org/api/ng/filter/waluta –

Odpowiedz

1
<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Example - example-example52-production</title> 


     <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min.js"></script> 



     </head> 
     <body ng-app=""> 
     <script> 
    function Ctrl($scope) { 
     $scope.amount = 1234.56; 
    } 
     </script> 
     <div ng-controller="Ctrl"> 
     <input type="number" ng-model="amount"> <br> 
     default currency symbol ($): <span id="currency-default">{{amount | currency}}</span>    <br> 
     custom currency identifier (USD$): <span>{{amount | currency:"USD$"}}</span> 
     </div> 
     </body> 
     </html> 
3

Niestety nie można sformatować za pomocą modelu ng. Przynajmniej nie w ten sposób. Będziesz musiał stworzyć własną dyrektywę, która implementuje parser i formater. Here is a similar question.

Jest to całkiem dobry dyrektywa nasz tam, że robi to obecnie: ngmodel-format

27

Utworzono prostą dyrektywę, która obsługuje formatowanie pól wejściowych. Oto przykład jsfiddle. Aby go użyć, dodaj to do swojego istniejącego kodu.

<div ng-repeate="item in items"> 
    <input type="text" ng-model="item.cost" format="currency" /> 
</div> 

Dodaj tę dyrektywę do swojego kodu.

// allow you to format a text input field. 
// <input type="text" ng-model="test" format="number" /> 
// <input type="text" ng-model="test" format="currency" /> 
.directive('format', ['$filter', function ($filter) { 
    return { 
     require: '?ngModel', 
     link: function (scope, elem, attrs, ctrl) { 
      if (!ctrl) return; 

      ctrl.$formatters.unshift(function (a) { 
       return $filter(attrs.format)(ctrl.$modelValue) 
      }); 

      elem.bind('blur', function(event) { 
       var plainNumber = elem.val().replace(/[^\d|\-+|\.+]/g, ''); 
       elem.val($filter(attrs.format)(plainNumber)); 
      }); 
     } 
    }; 
}]); 
+5

Ale wartość modelu ma wpływ i nie jest liczbą, jest sformatowanym ciągiem –

-2

Napisałem tę dyrektywę i to pomogło mi się sformatować waluty. Mam nadzieję, że to pomoże komuś.

.directive('numericOnly', function(){ 
    return { 

     require: 'ngModel', 
     link: function(scope, element, attrs, modelCtrl) { 

      var regex = /^[1-9]\d*(((.\d{3}){1})?(\,\d{0,2})?)$/; 
      modelCtrl.$parsers.push(function (inputValue) { 

       var transformedInput = inputValue; 
       if (regex.test(transformedInput)) { 

        console.log('passed the expression...'); 
        modelCtrl.$setViewValue(transformedInput); 
        modelCtrl.$render(); 
        return transformedInput; 
       } else { 

        console.log('did not pass the expression...'); 
        transformedInput = transformedInput.substr(0, transformedInput.length-1); 
        modelCtrl.$setViewValue(transformedInput); 
        modelCtrl.$render(); 
        return transformedInput; 
       } 
      }); 
     } 
    }; 
}); 
+0

To tylko sprawdza, czy dane wejściowe są liczbami uniemożliwiającymi inny znak. W kodzie nie ma żadnej waluty. – gerl

Powiązane problemy