用于嵌套ng-repeat的复杂自定义过滤器

时间:2017-01-02 14:53:34

标签: javascript angularjs

我已经坚持了2天,尝试了很多方法仍然无法做到这一点。我无法更改API数据,因此我必须处理前端处理。我真的需要一些帮助。

  $scope.stationary = [{
    "name": "Pen",
    "data": [{
      "date": "1-10-2017",
      "inventory": 25
    }, {
      "date": "2-10-2017",
      "inventory": 21
    }]
  }, {
    "name": "Color Pencil",
    "data": [{
      "date": "1-10-2017",
      "inventory": 3
    }, {
      "date": "2-10-2017",
      "inventory": 0
    }]
  }, {
    "name": "Color Pencil Special",
    "data": [{
      "date": "1-10-2017",
      "inventory": 2
    }, {
      "date": "2-10-2017",
      "inventory": 1 // make this view to '-' since inventory of color pencil is zero
    }]
  }]

http://jsfiddle.net/op2zd2vr/

如果彩色铅笔的库存为零,则应在彩色铅笔专栏上显示“ - ”。

2 个答案:

答案 0 :(得分:0)

试试这个:

更新了答案

myApp.filter('customFilter', function() {
    return function(items) {
        for (var i = 0; i < items.length; i++) {
            for (var k = 0; k < items[i].data.length; k++) {
                if (i != 0 && items[i - 1].data[k].inventory == 0) {
                    items[i].data[k]['isZero'] = true;
                } else {
                    items[i].data[k]['isZero'] = false;
                }
            }
        }
        return items;
    };
});

请参阅Updated jsfiddle link

这对我有用。

答案 1 :(得分:0)

猜猜你必须自己操纵数据,你不能简单地使用过滤器来处理这种特殊情况。

这是我的小提琴:http://jsfiddle.net/op2zd2vr/2/

使用的解决方案(取决于数据的名称):

var positions = [];
$scope.stationary.forEach(function (s) {
     if(s.name === 'Color Pencil'){
        for(var i = 0; i < s.data.length; i++){
          if(s.data[i].inventory === 0){
            positions.push(i);
          }
        }
     }
     if(s.name === 'Color Pencil Special'){
        for(var i = 0; i < s.data.length; i++){
          if(positions.indexOf(i) >= 0){
            s.data[i].inventory = '-';
          }
        }
     }
  });