簡體   English   中英

AngularJS中用於貨幣過濾器的Javascript代碼不適用於自定義符號

[英]Javascript code for currency filter in AngularJS not working with custom symbols

我有以下定制過濾器,如果輸入等於零,則返回“不可用”字符串,或者在其上應用定制貨幣符號(在本例中為盧比符號)后返回輸入。 這是代碼:

(function(){

   angular.module('TestApp')
   .filter('availability', function($filter){
        return function(input){
            if(input == null){
              return "Not Available";
            }
            var test = $filter('currency')(input,"&#8377",0);
            return test;
        }
   });

})();

但是,沒有達到期望的結果。 而是將貨幣符號的原始字符串打印在輸入的前面。 我在HTML代碼中使用了相同的貨幣符號,如下所示,它可以正常工作:

{{value.Charge | currency:"₹":0}}

我是否缺少明顯的東西? 如果沒有,是否有解決方法?

當您使用$filter('currency')(input,"&#8377",0); 在自定義過濾器中,“&#8377”只是一個字符串。 永遠不會將其解碼為相應的HTML實體。

如果您將其從HTML傳遞到過濾器中,則HTML將在到達過濾器之前對其進行解碼,因此它將可以正常工作。

否則,如果要在JavaScript中對值進行硬編碼,則需要自己對其進行解碼。 有一些關於SO的示例很容易找到,例如我在下面的硬編碼示例中使用的答案

 angular.module("app", []) .controller("controller", function($scope) { $scope.amount = 32; }) .filter('availability', function($filter) { return function(input, symbol) { console.log(symbol); if (input == null) { return "Not Available"; } var test = $filter('currency')(input, symbol, 0); return test; } }) .filter('hardcoded', function($filter) { return function(input) { if (input == null) { return "Not Available"; } var test = $filter('currency')(input, decodeEntities("&#8377;"), 0); return test; } }); // From https://stackoverflow.com/questions/5796718/html-entity-decode/9609450#9609450 var decodeEntities = (function() { // this prevents any overhead from creating the object each time var element = document.createElement('div'); function decodeHTMLEntities (str) { if(str && typeof str === 'string') { // strip script/html tags str = str.replace(/<script[^>]*>([\\S\\s]*?)<\\/script>/gmi, ''); str = str.replace(/<\\/?\\w(?:[^"'>]|"[^"]*"|'[^']*')*>/gmi, ''); element.innerHTML = str; str = element.textContent; element.textContent = ''; } return str; } return decodeHTMLEntities; })(); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script> <div ng-app="app" ng-controller="controller"> <input ng-model="amount" /> <p> Currency Filter: {{amount | currency:"&#8377;":0}} </p> <p> Custom Filter: {{amount | availability:"&#8377;"}} </p> <p> Hard-coded string in Custom Filter: {{amount | hardcoded}} </p> </div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM