2014-02-21 49 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> 
相關問題