Angular надає деяку підтримку циклу for з використанням чисел у своїх HTML-директивах:
<div data-ng-repeat="i in [1,2,3,4,5]">
do something
</div>
Але якщо ваша змінна області видимості включає діапазон, який має динамічне число, вам потрібно буде кожного разу створювати порожній масив.
У контролері
var range = [];
for(var i=0;i<total;i++) {
range.push(i);
}
$scope.range = range;
В HTML
<div data-ng-repeat="i in range">
do something
</div>
Це працює, але це непотрібно, оскільки ми не будемо використовувати масив діапазону взагалі в циклі. Чи знає хтось про встановлення діапазону або регулярного для мінімального/максимального значення?
Щось на кшталт:
<div data-ng-repeat="i in 1 .. 100">
do something
</div>
Я трохи підправив цю відповідь і вийшла [ця скрипка][2].
Фільтр визначається як:
var myApp = angular.module('myApp', []);
myApp.filter('range', function() {
return function(input, total) {
total = parseInt(total);
for (var i=0; i<total; i++) {
input.push(i);
}
return input;
};
});
З повтором, який використовується таким чином:
<div ng-repeat="n in [] | range:100">
do something
</div>
Я придумав дещо інший синтаксис, який підходить мені трохи більше і додає необов'язкову нижню межу:
myApp.filter('makeRange', function() {
return function(input) {
var lowBound, highBound;
switch (input.length) {
case 1:
lowBound = 0;
highBound = parseInt(input[0]) - 1;
break;
case 2:
lowBound = parseInt(input[0]);
highBound = parseInt(input[1]);
break;
default:
return input;
}
var result = [];
for (var i = lowBound; i <= highBound; i++)
result.push(i);
return result;
};
});
яку ви можете використовувати як
<div ng-repeat="n in [10] | makeRange">Do something 0..9: {{n}}</div>
або
<div ng-repeat="n in [20, 29] | makeRange">Do something 20..29: {{n}}</div>
Для новачків в angularjs. Індекс можна отримати за допомогою $index.
Наприклад:
<div ng-repeat="n in [] | range:10">
do something number {{$index}}
</div>
Що при використанні зручного фільтра Gloopy виведе:
;
виконати щось під номером 0
;
зробити щось під номером 1
зробити щось під номером 2
;
зробити щось під номером 3
зробити щось під номером 4
зробити щось під номером 5
зробити щось під номером 6
зробіть щось під номером 7
зробіть щось під номером 8
зробити щось під номером 9