按现有数组值进行ng-repeat过滤

时间:2015-12-30 18:51:19

标签: javascript angularjs angularjs-ng-repeat ng-repeat

所以我正在使用基本的产品类别模型来解决过滤问题,我无法弄清楚如何从数组中的一个对象中提取属性值,同时重复另一个对象。

我的类别数组的简化版本,在范围内,如下所示。我可以使用前面的指令输出他们的名字,结果是预期的:

[{
    "_id": "TY76",
    "name": "Planes"
}, {
    "_id": "887T",
    "name": "Trains"
}, {
    "_id": "A0K4",
    "name": "Autos"
}]

<p ng-repeat="category in product.categories "> {{ category.name }}</p>

这是一个简化的产品,也在范围内,可能包含一个或多个类别的ID。在这种情况下,Bobble Head属于Planes和Autos:

{
    "_id": "9876",
    "name": "Bobble Head",
    "cats": "['TY76','A0K4']"
}

现在,这里是我很难过的地方。我需要输出产品的类别名称。我可以通过以下方式输出ID:

<p ng-repeat="cat in product.cats ">{{ cat }}</p>

但这对最终用户没有用,但我不知道如何最终结果:

产品:Bobble Head | 类别:Planes,Autos

我没有为每个产品添加类别名称的自主权,我尝试了一系列不同的过滤方法,但我认为我没有正确处理我的问题,因为我找不到很多关于这个的互联网。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

听起来你想要建立类别ID到类别名称的查找:

 var categories = [{
      "_id": "TY76",
      "name": "Planes"
  }, {
      "_id": "887T",
      "name": "Trains"
  }, {
      "_id": "A0K4",
      "name": "Autos"
  }];

  // build a category lookup id -> name
  var categoryLookup = {};
  categories.forEach(function(category) {
    categoryLookup[category._id] = category.name;
  });

这是一个完整的工作小提琴:http://jsfiddle.net/02qadem7/1/

答案 1 :(得分:0)

您可以创建一个密钥对对象,其中密钥是id,值是该类别的名称:

var categoriesArray = [{
    "_id": "TY76",
    "name": "Planes"
}, {
    "_id": "887T",
    "name": "Trains"
}, {
    "_id": "A0K4",
    "name": "Autos"
}];

$scope.categoriesMap = {};
categoriesArray.forEach(function(category) {
    $scope.categoriesMap[category._id] = category.name;
});

然后在您的视图中,您可以访问类别名称:

<div ng-repeat="product in products">
    <strong>Product: </strong> {{product.name}} |
    <strong>Categories: </strong> <span ng-repeat="category in product.cats">
      {{categoriesMap[category]}}
    </span>
</div>

这是一个傻瓜:http://plnkr.co/edit/BpBcCizzU2Vh8VPniiHA?p=preview

答案 2 :(得分:0)

我在类别数组上使用自定义过滤器。

myApp.filter('byCategoryIds', function() {
    return function(categories, catIds) {
        return categories.filter(function(item) {
            return (catIds.indexOf(item._id) != -1);
        });
    };
});

然后你可以像这样迭代Categori数组发送id数组:

<b>Product:</b> 
{{product.name}}; 
<b>Categories:</b> 
<span ng-repeat="cat in categories | byCategoryIds: product.cats">{{ cat.name }}, </span>