如何通过id和其他键过滤角度结果?

时间:2014-12-02 20:02:20

标签: angularjs

我想通过ID,评级和其他各种密钥过滤结果,我正在使用这种数据结构:

[
{
    "id": "1"
    "Description": "desc 1",
    "Rating": "rating 1",
    "MainImage": "image.jpg"
},
{
    "id":"1"
    "Description": "desc 2",
    "Rating": "rating 2",
    "MainImage": "image.jpg"
},
{
    "id": "2"
    "Description": "desc 3",
    "Rating": "rating 3",
    "MainImage": "image.jpg"
}
]

此数据从承诺返回,并分配给$scope.results。在模板中有一个ng-repeat来迭代结果。这工作正常,我的问题是:

如何按id过滤结果,例如,仅显示id为1的结果?我有这个工作,但它不是最有效的。我将过滤后的结果重新分配回$scope.results,但确实有效,但整个数据结构已被包含过滤结果的数据结构所取代。这显然不起作用,我做了一个工作,但我知道这不是最好的方法。

我需要一个自定义过滤器,它可以使用3个不同的选择列表来处理过滤,例如rating选择列表,productIdproductName

我究竟该怎么写这个函数?

<div class="product" data-ng-repeat="product in products | filter:searchFilter"></div>

3 个答案:

答案 0 :(得分:0)

我最终做了一些我发现here并在后端创建了一个函数的东西。类似的东西:

$scope.searchFilter = function (item) {
    return (item.id === $scope.results.id)
}

这段代码并不完全是我所使用的,但这是一般的想法。似乎工作:))

答案 1 :(得分:0)

id

答案 2 :(得分:-1)

我就是这样做的。

<input type="number" ng-modal="idFilter:selectedID">
<div ng-repeat="result in results | idFilter:selectedID | track by $index">
<something-repeated>
</div>

<script>
 angular.module('whatever').filter('idFilter', function(){
  return function(results, selectedID){
    return results.filter(function(result){
      return result.id == selectedID;
    });
  }
});
</script>