2016-02-03 56 views
1

我是新来的角,并遇到了我不知道设置此代码的最佳方式的场景。从基于另一个json文件的json文件中角度读取数据

我有2个JSON文件:

images.json

{ 
    "imageName":  "example.jpg", 
    "imageTags":  ["fun","work","utility"] 
    "productID":  ["item1","item3"] 
} 

products.json

{ 
    "productID":  "item1", 
    "productName":  "Staple Gun", 
    "productURL":  "Staple-Gun.htm" 
} 

我没有任何的代码,但,我真的试图让我确定我先建立这个正确的。

我的目标是根据标签拉取图像,所以我在第一个ng-repeat部分放了一个过滤器。这部分效果很好。但我希望能够链接到图像中的产品。我发现的最简单的方法是用productID作为过滤器进行ng-repeat,但如果我拉动50张照片,每张照片有2个项目,那么这是一大堆重复。在我看来,这需要大量的资源。这是最好的方式还是有更好的方法来处理这个问题?

代码例如:

<div ng-repeat="photo in photos | filter: 'fun'"> 
    <img ng-src="{{ photo.imageName }}"> 
    <span>Products In This Image</span> 
    <div ng-repeat="product in products | filter: photo.productID"> 
     <a ng-href="{{ product.productURL }}" title="{{ product.productName }}">{{ product.productName }}</a> 
    </div> 
</div> 

回答

1

的产品的简单映射到一个对象,使用productID作为键将是更有效的

$scope.product_map = {}; 
products.forEach(function(item) { 
    $scope.product_map[item.productID] = item 
}); 

会产生:

{ 
    "item1": { 
    "productID": "item1", 
    "productName": "Staple Gun", 
    "productURL": "Staple-Gun.htm" 
    } 
} 

这意味着每次您需要厕所时,不必过滤整个数组k上一产品,你可以简单地做:

var productNeeded = $scope.product_map['item1']; 

在视图这将转化:

<div ng-repeat="photo in photos | filter: 'fun'"> 
    <img ng-src="{{ photo.imageName }}"> 
    <span>Products In This Image</span> 
    <!-- iterate small array of productID's in photo object --> 
    <div ng-repeat="id in photo.productID"> 
     <!-- product_map[id] is a single object reference --> 
     <a ng-href="{{ product_map[id].productURL }}" title="{{ product_map[id].productName }}">{{ product_map[id].productName }}</a> 
    </div> 
</div> 
+0

这正是我一直在寻找。我认为必须有更好的方法来引用列表,而不必每次都重新加载列表。我的json文件很大,这应该会加速一些。 – zadees