angularjs过滤功能

时间:2014-08-20 19:59:51

标签: javascript angularjs filter

我发现这个过滤器https://gist.github.com/Cacodaimon/7309268 sumByKey效果很好,可以按任意给定的密钥计算摘要。

demo.filter('sumByKey', function () {
    return function (data, key) {
        if (typeof (data) === 'undefined' || typeof (key) === 'undefined') {
        return 0;
    }

    var sum = 0;
    for (var i = data.length - 1; i >= 0; i--) {
        sum += parseInt(data[i][key]);
    }

    return sum;
   };
})

如何将此过滤器设为函数,即:

$scope.getTotal = function(key){
  // function of the filter here
}

原因是即使我可以像这样使用过滤器:

{{filtered|sumByKey:'quantity'}}

我不能在这样的计算中使用它:

 {{filtered|sumByKey:'quantity' * price}}

我可以使用这样的函数:

{{getTotal(quantity) * price}}

有关如何在计算中使用过滤器或使过滤器起作用的任何想法?

2 个答案:

答案 0 :(得分:0)

您可以在过滤器中使用某个功能:

  

function(value):谓词函数可用于写入任意过滤器。为数组的每个元素调用该函数。最终结果是谓词返回true的那些元素的数组。

例如:

{{filtered|getTotal(quantity * price)}}

使用您的函数获取求和参数:

$scope.total = 0;
$scope.getTotal = function(name) {
    return function(val) {
        total += val;
    }
}

答案 1 :(得分:0)

你可以使用它,它更像是优先问题。只需将过滤结果包装在括号中: -

{{(filtered|sumByKey:'quantity') * price}}
  ^__                        __^

<强> Demo