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,"₹",0);
return test;
}
});
})();
然而,并没有达到期望的结果。相反,货币符号的原始字符串被打印在输入的前面。我在HTML代码中使用了相同的货币符号,如下所示,它很有效:
{{value.Charge | currency:"₹":0}}
我是不是错过了一些显而易见的东西?如果没有,是否有解决方法?
当您在自定义筛选器中使用$filter('currency')(input,"₹",0);
时,"₹"只是一个字符串。它永远不会被解码成相应的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>
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- jQuery自定义验证比较多个输入的序列
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 在wordpress一定时间后更改自定义字段
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 自定义函数中的光标位置
- 用于检查数组中是否存在元素的javascript自定义方法
- AngularJS中货币过滤器的Javascript代码无法使用自定义符号
- 如何在javascript中创建看起来像点符号的自定义函数?例如str.getFirstIndex();
- 为什么我在自定义验证后无法输入 % 符号
- 选择2个自定义匹配器,但保留带状音调符号
- 自定义 ajax 调用以 & 符号.js
- 自定义符号动画不遵循多段线路径
- 用于自定义图像项目符号的Nivo滑块
- 在高图表中设置自定义图例项符号(或图标)
- 将自定义符号设置为HighCharts图例
- 如何自定义插入符号
- 在自定义文本区域中显示插入符号而不显示其文本
- 添加自定义符号到谷歌地图