如果表达式中有数学,则如果为null,则如何隐藏角度表达式

时间:2015-11-03 05:59:50

标签: javascript angularjs

我在页面上有几个简短的Angularjs表达式,它们使用值执行一些基本算术。由于算术,它们总是计算为null,直到传递了一个值。我意识到这可能不是解决这个问题的最好方法,并且愿意接受建议,但我认为在这种情况下,我只想知道如何隐藏NaN的视图。

{{myItem.value / 4}}

我已经尝试了here提到的解决方案,但我认为我的情况不同,因为每次都会计算数学,因此返回NaN,而不是数字,(null)。

2 个答案:

答案 0 :(得分:2)

试试这个

<div ng-hide="!(myItem.value / 4)">
  {{myItem.value / 4}}
</div>

答案 1 :(得分:0)

创建过滤器:

app.filter('divide', function() {
    function isNumeric(n) {
       return !isNaN(parseFloat(n)) && isFinite(n);
    }

    return function(value, arg) {
        if (isNumeric(value) && isNumeric(arg))
           return parseFloat(value)/parseFloat(arg);

        return value;
    }
});

用法:

{{ myItem.Value | divide: 4 }}

如果myItem.Value或传递给除法过滤器的参数不是数字(或未定义),那么它只会返回未改变的原始值。

如果要隐藏值,如果它未定义或不是数字,则过滤器会帮助您再次出现:

app.filter('numberDefault', function() {
    return function(value, defaultValue) {
        function isNumeric(n) {
           return !isNaN(parseFloat(n)) && isFinite(n);
        }

        if (isNumeric(value))
           return parseFloat(n);

        return defaultValue;
    }
});

然后你可以链接它们:

{{ myItem.Value | numberDefault:'' | divide: 4 }}

如果myItem.Value不是数字,则numberDefault将返回一个空字符串。传递给除法过滤器时,空字符串只返回原始值,即空字符串。