angular1.x货币过滤器没有零

时间:2018-03-08 15:45:23

标签: angularjs

如果货币值为零,我要求不提供货币值。

即:

v=1 render $1
v=0 render nothing

[编辑]

:鸡蛋在脸上:

一旦我深入了解核心代码,我发现 是自定义过滤器。

angular
    .module('com.td.tdct.bbpcCore')
    .filter('currencyFilter', ['$rootScope', 'tdBbpcUserService', '$filter', function ($rootScope, tdBbpcUserService, $filter) {
    return function (input, decimal, symbol) {
        var languageCd;

        if (input) {
            if (!$rootScope.languageChange) {
                languageCd = tdBbpcUserService.getLanguageCd();
            } else {
                languageCd = $rootScope.languageChange;
            }

            var value = input.toString().replace(/[^\d|\-+|\.+]/g, '');
            value = (angular.isNumber(decimal)) ? $filter('number')(value, decimal) : $filter('number')(value);

            if (angular.isString(languageCd) && (languageCd.toUpperCase() === "FR" || languageCd.toUpperCase() === "FR_CA")) {
                value = (angular.isDefined(symbol) && symbol === "N") ? value.toString() : value.toString() + "  $";
            } else {
                value = (angular.isDefined(symbol) && symbol === "N") ? value.toString() : "$  " + value.toString();
            }
            return value;
        }

    };
}]);

因此实施:

{{asset.prevMarginalRate | currencyFilter:0}}

我想要

  • 向此现有过滤器添加可选标志 - 如果设置则返回空(它必须是可选的,因为不应影响使用此方法的现有方法)。

  • 将另一个过滤器放在最上面。

以最佳实践为准。

在第一种情况下,我试图弄清楚如何传递那个旗帜,因此:

{{asset.prevMarginalRate | currencyFilter:0, true}}

2 个答案:

答案 0 :(得分:0)

您需要创建自己的过滤器才能实现此目的。

我会做这样的事情:

app.filter('currencyWithoutZero', function() {
    return function(x) {
      if(x !== 0) return '$' + x;
      else return '';
    };
});

<强> Working demo

答案 1 :(得分:0)

0 falsy 。因此,您可以执行OR操作以删除任何false / null /空值。

function foo(x) {
  return x || "nothing";
}

v = 1;
console.log(foo(v));
v = 0;
console.log(foo(v));