2014-02-21 75 views
0

相当模糊的问题,希望这会更好地解释。我抓住以下JSON:AngularJS - 在ID数组上重复,我该如何查找它们?

{ 
    items: [ 
    { name: "item 1", options: [1, 2, 3] }, 
    { name: "item 2", options: [2, 3] }, 
    { name: "item 3", options: [1] } 
    ], 
    options: [ 
    { id: 1, color: "red" }, 
    { id: 2, color: "blue" }, 
    { id: 3, color: "yellow" } 
    ] 
} 

而且我重复过类似的项目,以便:

<div data-ng-repeat="item in items"> 
    <span>{{ name }}</span> 
    <ul> 
    <li data-ng-repeat="i in item.options">{{i}}</li> 
    </ul> 
</div> 

理想情况下,我想能够访问颜色参数(和其他人)在我的第二个ng-repeat循环中(而不仅仅是数字原语)。什么是最好的方式来做到这一点?我应该在初始化时为每个项目在选项数组上做一个映射,并将每个索引转换为完整对象(使用id和颜色)?或者我可以将索引传递给控制器​​,查看并使用我查找的选项扩展范围?

+0

另一个重复,因为'选项'超出'项目' – tymeJV

+0

@Dave I f以下任何答案都是有帮助的,请注意他们。如果有的话是正确的,请标记为正确。 – willlma

回答

0
<li data-ng-repeat="i in item.options">{{options[i-1].color}}</li> 

编辑:如果选择数组是未经分类:

<li data-ng-repeat="i in item.options">{{getColor(i)}}</li> 

controller.js

$scope.getColor = function(i) { 
    for(var index=0, len=$scope.options.length; index<len; index++) { 
    if ($scope.options.index.id===i) return $scope.options.index.color; 
    } 
} 
+0

我的印象是,'我'是选项的ID,不一定与选项数组中的索引直接相关。我错了吗? –

+0

你说得对,但是如果你的id总是等于'index + 1',那没关系。如果您的'选项'数组未排序,请参阅更新的答案。 – willlma

0

一种选择是使用一个函数来获取与关联的选项你项目。

http://plnkr.co/edit/RZvH2lWilQaIUJTq4DUL?p=info

<body ng-controller="MainCtrl"> 
    <div data-ng-repeat="item in items"> 
     <span>{{ name }}</span> 
     <ul> 
     <li data-ng-repeat="i in getOptions(item.options)">{{i.color}}</li> 
     </ul> 
    </div> 
    </body> 

app.controller('MainCtrl', function($scope) { 
    $scope.items = [ 
    { name: "item 1", options: [1, 2, 3] }, 
    { name: "item 2", options: [2, 3] }, 
    { name: "item 3", options: [1] } 
    ]; 
    $scope.options= [ 
    { id: 1, color: "red" }, 
    { id: 2, color: "blue" }, 
    { id: 3, color: "yellow" } 
    ]; 

    $scope.getOptions = function(options) { 
    var rv = []; 
    angular.forEach($scope.options, function(option, idx){ 
     if(options.indexOf(option.id) > -1) 
     { 
     rv.push(option); 
     } 
    }); 
    return rv; 
    } 
}); 
0

最好的办法是在你的JSON作为这种结构返回options部分

options: { 
    "1": "red", 
    "2": "blue", 
    "3": "yellow" 
} 

然后你就可以通过按键,因为它是一个JavaScript对象访问:

<li data-ng-repeat="i in item.options">{{options[i]}}</li> 
相关问题