У меня есть регистр, который перечисляет людей в алфавитном порядке от A до Z ... Каждый человек, например г-н A, имеет набор соответствующих данных Histories
.AngularJS - Уменьшение количества ng-повторов
У меня есть таблица с простым ng-repeat
, который отображает данные для 12 ячеек (представляющих 12 месяцев).
Если предоставляется 12 месяцев/ячеек данных, я показываю все данные, если предоставляется только 5 месяцев данных (всего менее 12), я вызываю услугу srvEmptyCells
, которая вычисляет оставшиеся ячейки и отображает их в темный цвет.
Проблемы с этим, что я замечаю я повторив нг-повтор:
emptyCell in getEmptyCells
много много раз, воздействующих на производительность страницы даются у меня есть более 100 пользователей.
Есть ли способ сохранить количество пустых ячеек для каждого конкретного пользователя? И удалить необходимость дополнительных ng-repeats
? Будет ли директива улучшаться?
Херес plunker: http://plnkr.co/edit/2UKDD1fvfYGMjX9oJqVu?p=preview
HTML:
<table ng-repeat="data in myData" class="my-table">
<caption>
{{ data.Name }}
</caption>
<tbody>
<tr>
<th>Rate</th>
<td ng-repeat="history in data.Histories.slice(0, 12)" class="my-table-cell">
{{history.Rate}}
</td>
<td ng-repeat="emptyCell in getEmptyCells(data.Histories.slice(0, 12).length)" class="empty"></td>
</tr>
<tr>
<th>Effort</th>
<td ng-repeat="history in data.Histories.slice(0, 12)" class="my-table-cell">
{{history.Effort}}
</td>
<td ng-repeat="emptyCell in getEmptyCells(data.Histories.slice(0, 12).length)" class="empty"></td>
</tr>
<tr>
<th>Advance</th>
<td ng-repeat="history in data.Histories.slice(0, 12)" class="my-table-cell">
{{history.Advance}}
</td>
<td ng-repeat="emptyCell in getEmptyCells(data.Histories.slice(0, 12).length)" class="empty"></td>
</tr>
<tr>
<th>Previous</th>
<td ng-repeat="history in data.Histories.slice(0, 12)" class="my-table-cell">
{{history.Previous}}
</td>
<td ng-repeat="emptyCell in getEmptyCells(data.Histories.slice(0, 12).length)" class="empty"></td>
</tr>
<tr>
<th>Current</th>
<td ng-repeat="history in data.Histories.slice(0, 12)" class="my-table-cell">
{{history.Current}}
</td>
<td ng-repeat="emptyCell in getEmptyCells(data.Histories.slice(0, 12).length)" class="empty"></td>
</tr>
<tr>
<th>Code</th>
<td ng-repeat="history in data.Histories.slice(0, 12)" class="my-table-cell">
{{history.Code}}
</td>
<td ng-repeat="emptyCell in getEmptyCells(data.Histories.slice(0, 12).length)" class="empty"></td>
</tr>
</tbody>
</table>
JS:
app.controller('MainCtrl', function($scope, $http, factoryGetJSONFile, srvEmptyCells) {
$scope.name = 'World';
factoryGetJSONFile.getMyData(function(data) {
$scope.myData = data.MyData.Entries;
});
$scope.getEmptyCells = srvEmptyCells.getEmptyCells;
});
app.factory('srvEmptyCells', function() {
return {
getEmptyCells: function(len) {
var emptyCells = [];
for(var i = 0; i < 12 - len; i++){
emptyCells.push(i);
}
return emptyCells;
}
};
});
Спасибо за вход, к сожалению, я наклоняю измените, какие данные возвращаются. Какое решение кажется интересным, любые примеры? –
проверить сейчас, может быть способ сделать это, вызвав функцию .memoize, но я должен уйти сейчас –
Спасибо, например, может ли цикл for быть помещен в мой контроллер, а не в Factory? Memoization выглядит интересно, но я никогда не использовал его и не знал, с чего начать? Было бы просто в этом случае? –