我想修改currency
过滤器以处理输入值中的自定义货币格式。
(例如,AUD 3.00 -> $3.00
)。
一种选择是从头开始编写我自己的过滤器。然而,这似乎是很多重复,鉴于现有的过滤器是伟大的,我只需要先修剪几个字符的正面。
理想情况下,我会有这样的东西:
.filter('money', function($filters) {
return function(text){
var currency = text.substring(4)
return $filters('currency')(currency)
};
});
有以下两种方法:
formatNumber()
显示了这里我还有什么别的选择吗?
发布于 2012-11-09 05:06:04
是的,我找到的最好的解决方案是创建一个新的过滤器:
angular.module('ui.filters').filter('customCurrency',
[ '$filter', function(filter) {
var currencyFilter = filter('currency');
return function(amount, currencySymbol) {
return currencyFilter(amount.substr(4), currencySymbol);
}
} ]);
这将像"AUD 30.00“这样的值转换为"$30.00”。
根据我的尝试,您不能在1.0.1版本中覆盖一个过滤器。我尝试使用相同的名称创建一个过滤器,并试图引用原始过滤器会导致无限循环。
这里是一个很好的考虑点:
然而,我建议不要这样做--即使这是允许的。预定义过滤器是AngularJS的公共API。如果AngularJS的某些部分在内部使用它们,或者有一天您安装了一些依赖于该过滤器的附加组件,该怎么办?
参见也是,基本相同的结论,即使我相信op并不真的需要一个自定义过滤器。
如果函数没有公开,那么作者认为它不是他们想要提供的公共api。作者可能有一个特定的执行功能,这个功能可能不是很明显。
PS:模块是您需要过滤器的任何东西。我将不同模块中的一些功能分开,并在构建主模块时要求它们。
var App = angular.module('App', [ 'ui' ]);
发布于 2015-02-08 22:22:18
最好的方法就是,
<div> {{amount | currency:'$'}} </div>
在你的html里。这将自动删除与货币类型对应的前几个字符,并将其替换为您传递的字符串参数'$‘。
发布于 2012-11-09 08:40:06
角的货币筛选器允许您使用区域设置服务中的默认货币符号,也可以为筛选器提供自定义的货币符号。如果您的应用程序将只在一个地区使用,那么依赖默认的货币符号是很好的。然而,如果您预期其他地区的观众可能会使用您的应用程序,您应该提供自己的货币符号,以确保实际价值被理解。 例如,如果您想使用包含货币筛选器的绑定显示1000美元的帐户余额:{ 1000欧元},并且您的应用程序当前处于en-US区域设置。将显示“1000.00美元”。然而,如果在另一个地方(例如,日本)的人查看您的应用程序,她的浏览器将指定地区为ja,其余的1000.00元将被显示出来。这会让你的当事人很生气的。 在这种情况下,您需要在配置筛选器(例如,$1,000.00)时为货币筛选器提供一个货币符号作为参数,从而覆盖默认的货币符号。这样,角将始终显示‘美元$1000’的余额,并忽略任何地区变化。
参见关于本地化的说明:http://docs.angularjs.org/guide/i18n
https://stackoverflow.com/questions/13301367
复制