两维数据,显示无结果

时间:2015-04-23 17:24:49

标签: angularjs

我是angularJs的初学者

我有两个维度的json数据:

[
    {
        "nom": "Name 1",
        "subventions": [
            {
                "beneficiaire": "ben\u00e9f Phipippe C mars 2015",
                "montant": "7<span class='space'><\/span>898,99",
                "annee": 1,
                "trimestre": 4,
                "infoAdditionnelle": "<p>info mars - 2015<\/p>\r\n<div id=\"nested_deluminate_fullscreen_workaround\" style=\"background-color: rgba(0, 0, 0, 0);\">\u00a0<\/div>"
            },
            {
                "beneficiaire": "cvbcvbn",
                "projet": "<p>cvnnncbcnbcbn<\/p>",
                "circonscription": "456sdxfvxc",
                "montant": "131,00",
                "annee": 3,
                "trimestre": 2,
                "infoAdditionnelle": "<p>test<\/p>"
            }
        ]
    },
    {
        "nom": "Name 2",
        "subventions": [
            {
                "beneficiaire": "pierre m",
                "montant": "1<span class='space'><\/span>000,00",
                "annee": 3,
                "trimestre": 1,
                "infoAdditionnelle": "<p>avtil 2015-16<\/p>"}
        ]
    },
    {
        "nom": "Name 3",
        "subventions": [
            {
                "beneficiaire": "bene pierre p avril 2015-16",
                "montant": "1<span class='space'><\/span>222,00",
                "annee": 3,
                "trimestre": 1,
                "infoAdditionnelle": "<p>p avril 2015-16<\/p>"
            }
        ]
    }
]

正如你所看到的,有一组人包含“nom”和“subventions”字段,“补助金也是一个数组

我有“annee”和“trimestre”字段的过滤器,我想要做的是当没有结果显示时,显示“无结果”消息

要计算结果数量,我使用此功能

$scope.filterArray = function(resultsPersonnes) {
    var data = resultsPersonnes.filter(function(prop) {
        return prop.subventions[0].annee == $scope.annee.id;
    });
    if ($scope.myFilter.trimestre > 0) {
        return data.filter(function(prop) {
            return prop.subventions[0].trimestre == $scope.myFilter.trimestre;
        });
    } else {
        return data
    }

}

它并不适用于所有情况,您可以在此处查看示例http://plnkr.co/edit/9TbO0Hl9LziUS2B6AsAr?p=preview

如果你点击“Trimestre”中的“Juillet - septembre”,我得到一个结果,但显示“无结果”消息!!!

你知道错误吗?请帮忙!

非常感谢

1 个答案:

答案 0 :(得分:1)

正如您在评论中已经猜到的那样,您只检查了第一行。修复是使用Array.some检查所有行,例如像这样,如果数组中至少有一个项为参数给出的函数返回true,则返回true。

编辑:需要将过滤更新为单个过滤器

$scope.filterArray = function(resultsPersonnes) {
    var data = resultsPersonnes.filter(function(prop) {
      return prop.subventions.some(function (subvention) {
        var anneeMatches = subvention.annee == $scope.annee.id;
        var trimestreMatches = true;
        if ($scope.myFilter.trimestre > 0) {
          trimestreMatches = subvention.trimestre == $scope.myFilter.trimestre;
        }
        return anneeMatches && trimestreMatches;
      });
    });
    return data;
};

See working plunker