【问题标题】:Two dimensions data, display no results二维数据,不显示结果
【发布时间】:2015-04-23 17:24:48
【问题描述】:

我是 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”的人员数组,“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”,我得到了一个结果,但显示“没有结果”消息!!!

你看到错误了吗?请帮忙!

非常感谢

【问题讨论】:

  • 因为 filterArray(resultsPersonnes).length 真的是 0
  • 我认为这是因为 [0] 因为它总是检查第一行。但是如何修复它?我应该放什么?我迷路了!

标签: angularjs


【解决方案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

【讨论】:

  • 我看到的唯一问题是,当我将下拉值更改为 2014-2015 并单击“Juillet - septembre”时,没有结果,但“没有结果”消息是不显示:(
  • 啊,非常正确,我错过了这一点很糟糕。在这种情况下,您只需要进行一次过滤,请参阅我编辑的答案。
猜你喜欢
  • 2017-05-04
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 2019-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多