[英]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,"₹",0);
return test;
}
});
})();
但是,沒有達到期望的結果。 而是將貨幣符號的原始字符串打印在輸入的前面。 我在HTML代碼中使用了相同的貨幣符號,如下所示,它可以正常工作:
{{value.Charge | currency:"₹":0}}
我是否缺少明顯的東西? 如果沒有,是否有解決方法?
當您使用$filter('currency')(input,"₹",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("₹"), 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:"₹":0}} </p> <p> Custom Filter: {{amount | availability:"₹"}} </p> <p> Hard-coded string in Custom Filter: {{amount | hardcoded}} </p> </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.