如何使用AngularJS过滤器

时间:2015-05-07 17:02:04

标签: javascript angularjs if-statement angularjs-filter

我试图在网格中编写一个过滤器,用于捕获所有null,undefined,空字符串或其他类似值,并显示一个短划线" - "。到目前为止,我已经写了以下内容,但它没有捕获空值,我想知道是否可以更简洁,可能重构以避免三层嵌套的if / else语句。需要检查它们的百分比值是否超过0且低于1.此外,负数和0应该按原样返回。谢谢!

angular.module('AdverseEventsExplorer.main').filter('emptyCellFilter', function ($filter) {
    return function (input, cellFilter, args1, args2) {    

        if (cellFilter == undefined) {
            return (angular.isNumber(input) || angular.isDefined(input) && input.length > 0) ? input : '-';
        } else {
            if (cellFilter.match(/pctg|percent|pctgFilter|incidence/ig)) {
                return (input > 0 && input < 1.0000000) ? $filter(cellFilter)(input, args1, args2) : '-';
            } else {
                return (angular.isNumber(input) || angular.isDefined(input) && input.length > 0) ? input : '-';
            }
        }

    };
});

版本2.0考虑到@ tymeJV的评论:

angular.module('AdverseEventsExplorer.main').filter('emptyCellFilter', function ($filter) {
    return function (input, cellFilter, args1, args2) {

        if (!cellFilter) {
            return (angular.isNumber(input) || (input)) ? input : '-';
        } else {
            if (cellFilter.match(/pctg|percent|pctgFilter|incidence/ig)) {
                return (input > 0 && input < 1.0000000) ? $filter(cellFilter)(input, args1, args2) : '-';
            } else {
                return (angular.isNumber(input) || (input)) ? $filter(cellFilter)(input, args1, args2) : '-';
            }
        }

    };
});

2 个答案:

答案 0 :(得分:3)

每当遇到一个过于复杂而不能重构的函数时,请尝试将一些较小的语句提取到简洁命名的变量中。它使我们的大脑更容易跟踪功能的要求,并且对于阅读代码的新开发者来说,它也更具可读性。

var inputHasValue = angular.isNumber(input) || input;
if(!inputHasValue){
    return '-';
}
if (!cellFilter) {
    return input;
}

var isPercentageCell = cellFilter.match(/pctg|percent|pctgFilter|incidence/ig);
var valueIsInRange = input > 0 && input < 1;
if(!isPercentageCell || valueIsInRange){
    return $filter(cellFilter)(input, args1, args2);
}
return '-';

答案 1 :(得分:1)

typeof x ==='number' || !!x 
当x为null,未定义或空字符串

时,

为false

只有一种情况不起作用 - 如果你需要过滤布尔变量,但你的情况似乎并不需要它。

无论如何,你可以使用

typeof x === 'boolean' || typeof x ==='number' || !!x