【问题标题】:Filter not working on function returned values过滤器不适用于函数返回值
【发布时间】:2016-04-01 12:17:37
【问题描述】:

我正在使用 Angular 的货币过滤器。它似乎没有过滤从函数返回的数据。我想我错过了一些东西。可能是过滤器被消化的时候?

这是我的代码的 sn-ps:

html模板文件

<span>total: {{ vm.total.exgst | currency}}<span>

html 模板的controller.js

var calculateTotalExGST = function() { return _.sum(vm.items, function(item)
                                                   { return item.cost; });
                                      };
vm.total = { exgst: calculateTotalExGST() };

所以 html 会以某种方式显示

总数:5

但它应该显示为 $5.00。该值被返回,但该函数但过滤器不起作用。当 $digest 发生时,它可以做些什么吗?

谁能帮我解释一下?

编辑: 关于代码的更多信息,vm.items 是来自 ui-router 的$state 的值。

我不确定如何将所有这些都放入 jsfiddler。所以我刚刚嘲笑了$state。 但很遗憾,我无法复制我的问题。

https://jsfiddle.net/ex5rj9u7/

【问题讨论】:

  • 请准备一个 codepen/jsfiddle 来显示您的问题。

标签: javascript angularjs angular-filters


【解决方案1】:

我认为您使用了错误的方法。在 Lodash 文档中,sum 仅用于数组。您正在寻找sumBy 方法。

看看这个例子:https://jsfiddle.net/relferreira/dng7s3qs/

JS:

angular.module('app', []);

angular.module('app')
    .controller('MainController', mainController);

mainController.$inject = ['$scope'];

function mainController($scope){

    var vm = this;

  vm.items = [
    { cost: 5},
    { cost: 5}
  ];

    var calculateTotalExGST = function() { 
    return _.sumBy(vm.items, function(item){ 
        return item.cost; 
    });
  };

  console.log(calculateTotalExGST())

    vm.total = { exgst: calculateTotalExGST() };


}

HTML:

<div data-ng-app="app">

  <section ng-controller="MainController as mainVm">
    <span>total: {{ mainVm.total.exgst | currency}}</span>
  </section>

</div>

【讨论】:

  • 使用 sumBy 是正确的,但我运行的版本是 3.10(其中 sum 是 sumBy)。求和有效,但过滤无效。
  • 好的。但我发布了一个工作示例。看看它,看看你的代码有什么问题。查看您的控制台中是否没有任何 JS 错误。当我复制您的代码时,您的 calculateTotalExGST 函数中有语法错误。
猜你喜欢
  • 2019-03-23
  • 2021-11-22
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2023-04-01
  • 2018-12-15
  • 1970-01-01
  • 2022-11-09
相关资源
最近更新 更多