【问题标题】:angularjs filter to functionangularjs过滤器起作用
【发布时间】:2014-08-20 19:59:50
【问题描述】:

我发现这个过滤器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}}

关于如何在计算中使用过滤器或使过滤器发挥作用的任何想法?

【问题讨论】:

  • 这些答案有什么好运气吗? :)

标签: javascript angularjs filter


【解决方案1】:

事实上你可以使用它,它更多的是优先级问题。只需将过滤结果括在括号中即可:-

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

Demo

【讨论】:

    【解决方案2】:

    你可以在过滤器中有一个函数:

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

    例如:

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

    您的函数采用求和参数:

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

    【讨论】:

      猜你喜欢
      • 2015-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多