2014-01-03 3 views
0

Я просматриваю каждый словарь в главном списке, чтобы получить данные, относящиеся к конкретной «версии». Есть ли эффективный способ сделать это?разбор по списку json в angularjs

app.html:

<select ng-model="versionKey"> 
    <option ng-repeat="model in models">{{ model.version }}</option>  
</select> 

<div ng-repeat="stuff in models"> 
    <div ng-if="stuff.version == versionKey"> 
     <ul> 
      <li ng-repeat="instance in stuff.records"> 
       {{ instance }} 
      </li> 
     </ul> 
    </div> 
</div> 

JSON файл:

[ 
    {"records": [{"model": "bada", "crashes": 1}], "apikey": "2", "_id": "52c0417ce1382321ef038106", "version": "6"}, 

    {"records": [{"model": "sam", "crashes": 1}], "apikey": "2", "_id": "52c0417ce1382321ef038109", "version": "4"} 
] 
+0

2 вложенный массив и 2 нг-повтор нормальны для меня, хотя. – YOU

+0

Это всего лишь образец, фактические данные в кратных 10.It создает пустые элементы div для всех элементов. –

+0

просто пишите ng-repeat в ul вместо div? – YOU

ответ

2

Вы можете сделать фильтрацию в контроллере и удалить ng-if:

// in your controller 

var filterModelsForSelectedVersion = function (versionKey) { 
    return $scope.models.filter(function (model) { 
     return model.version === versionKey; 
    }); 
}; 

$scope.modelsForSelectedVersion = []; 

$scope.$watch('versionKey', function (versionKey) { 
    $scope.modelsForSelectedVersion = filterModelsForSelectedVersion(versionKey); 
}); 

<div ng-repeat="stuff in modelsForSelectedVersion"> 
    <div><!-- maybe the div is not necessary? --> 
     <ul> 
      <li ng-repeat="instance in stuff.records"> 
       {{ instance }} 
      </li> 
     </ul> 
    </div> 
</div> 

Пожалуйста, обратите внимание, что я использовал Array.prototype.filter. Если вам нужно поддерживать устаревшие браузеры, вы должны добавить для него полиполк или написать «старый стиль».

+1

Ницца. [Скрипка] (http://jsfiddle.net/dV248/) –

Смежные вопросы