繁体   English   中英

AngularJS如何过滤嵌套对象

[英]AngularJS How i can filter nested object

如何在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. 在html内
  2. 在控制器内部的功能中

通过文档

{{ 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过滤列表内部添加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM