AngularJS如何过滤嵌套对象

时间:2018-07-26 06:24:47

标签: javascript angularjs

如何在AngularJS中过滤嵌套对象?我创建了一个函数来获取proptypes。我要过滤type1.value = false

JSON:

scope.States = {
  "1": {
    "Prop": {
      "id": 1
    },
    "PropTypes": {
      "Type1": {
        "date": "2015-05-30T01:01:04",
        "value": false,
        "id": 1,
        "name": "defautPompier"
      },
      "Type2": {
        "date": "2015-05-30T01:01:04",
        "value": true,
        "id": 1,
        "name": "Delestage"
      }
    },
    "defaultsInstallations": ["defautPompier", "Delestage"]
  }
}

控制器:

$scope.GetDefaultByInstallation = function(title) {
    $scope.installationsStates = [];
    var res;
    $scope.result = [];
    Object.keys($scope.States).forEach(function(key) {
          var res = false;
          angular.forEach($scope.States[key].PropTypes, function(value, cle) {
                if ($scope.States[key].PropTypes[cle] == title) {
                  res = true;
                }
              }

1 个答案:

答案 0 :(得分:0)

要过滤数据,您有两种不同的方法:

  1. 在html内
  2. 在控制器内部的功能中

By documentation

{{ expression [| filter_name[:parameter_value] ... ] }}

在这种情况下,由于有了“管道”,您可以在代码中添加一个过滤器。

例如 HTML:

<ul>
  <li ng-repeat="friend in person.friends | startsWithA">
    {{ friend }}
  </li>
</ul>

JS:

app.filter('startsWithA', function () {
  return function (items) {
    var filtered = [];
    for (var i = 0; i < items.length; i++) {
      var item = items[i];
      // ... your logic for filter items
      // E.G.
      if (/a/i.test(item.name.substring(0, 1))) {
        filtered.push(item);
      }
    }
    return filtered;
  };
});

您还可以在控制器上过滤数据(您必须在范围内添加新的过滤列表),然后在ng-repeat内添加过滤列表。