【问题标题】:Angular 1.x - filtering objects called by a reference IDAngular 1.x - 过滤由引用 ID 调用的对象
【发布时间】:2016-07-03 22:23:25
【问题描述】:

您好,智能和关怀社区。​​p>

我想知道当通过数组中对象键的重复调用该对象时,是否有一种 Angular 方法来过滤对象属性。

这是一个人为的示例,但很重要,因为我的应用正在运行 firebase,并且我使用索引来收集特定用户的对象 ID。

例子:

angular.module('stackOverflowExample', []).controller('ExampleCtrl', function($scope){
  $scope.myObjectKeysArray = [
    'sdav', 'arfg', 'wefc'
  ];
  $scope.myObject = {
    sdav: {name:'mark', age:23},
    arfg: {name:'lucy', age:18},
    wefc: {name:'kat', age:19},
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="stackOverflowExample" ng-controller="ExampleCtrl">
  <label>
    <span>Search</span>
      <input type="text" ng-model="search">

  </label>
  <hr>
  <div ng-repeat="objectKey in myObjectKeysArray | filter:search" placeholder="search">
    <p>name: {{ myObject[objectKey].name }}</p>
    <p>age: {{ myObject[objectKey].age }}</p>
  </div>
</div>

谁能推荐一个甜蜜的方法来做到这一点,或者我应该在调用 repeat 之前创建一个数组?

【问题讨论】:

  • 制作数组最好,然后重复数组而不是键,让过滤器默认做它的工作
  • 你在使用 ES6 吗?
  • 是的,@developer033 我正在使用 es6

标签: angularjs filter reference


【解决方案1】:

好吧,如果我很好理解你的问题,你想过滤“子数组”,所以我合并了数组,将该键作为其数组的属性。

这是一个 sn-p 工作:

var app = angular.module('app', []);

app.controller('mainCtrl', function($scope) {
  $scope.myObjectKeysArray = [
    'sdav', 'arfg', 'wefc'
  ];

  $scope.myObject = {  
    "sdav":{  
      "name":"mark",
      "age":23
    },
    "arfg":{  
      "name":"lucy",
      "age":18
    },
    "wefc":{  
      "name":"kat",
      "age":19
    }
  };

  $scope.array = [];
  angular.forEach($scope.myObjectKeysArray, function(value, key) {
    $scope.array[key] = {};
    $scope.array[key].key = value;
    $scope.array[key].values = [];
    $scope.array[key].values.push($scope.myObject[value]);
  });      
});
<!DOCTYPE html>
<html ng-app="app">

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
</head>

<body ng-controller="mainCtrl">
  <label>
    <span>Search</span>
    <input type="text" ng-model="search">
  </label>
  <hr>
  <ul>
    <li ng-bind="arr.key" ng-repeat-start="arr in array" placeholder="search"></li>
    <ul ng-repeat-end ng-repeat="obj in arr.values | filter: { name: search }">
      <li ng-bind="'Name => ' + obj.name"></li>
      <li ng-bind="'Age => ' + obj.age"></li>
    </ul>
  </ul>
</body>

</html>

【讨论】:

  • 谢谢,您知道我们可以即时合并密钥的方法吗?原因是我从 firebase 获取了一个数组,并希望跳过将它们包装在一起的数据工厂的步骤。
  • 嗯,您无法更改数据。请使用真实代码编辑您的问题。
  • 我编辑了问题,将推理放在顶部,而不是在 sn-p 下。感谢您指出这一点,但问题不在于如何制作数组,尽管您的示例非常棒。
  • 好吧,但你不能提供任何真实的例子吗?也许我可以帮忙。
  • @developer033 干杯,我在我的服务中实现了类似的东西。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多