Итерация ng-repeat только X раз в AngularJs

Как я могу использовать ng-repeat, как в Javascript?

Пример:

<div ng-repeat="4">Text</div>

Я хочу повторить с ng-repeat 4 раза, но как я могу это сделать?

Ответ 1

Angular поставляется с пределом предельного фильтра: он поддерживает ограничение первых элементов x и последних элементов x:

<div ng-repeat="item in items|limitTo:4">{{item}}</div>

Ответ 2

Это простейшее обходное решение, о котором я мог подумать.

<span ng-repeat="n in [].constructor(5) track by $index">
{{$index}}
</span>

Вот пример Plunker.

Ответ 3

Вы можете использовать метод среза в объекте массива javascript

<div ng-repeat="item in items.slice(0, 4)">{{item}}</div>

Короткий сладкий

Ответ 4

в html:

<div ng-repeat="t in getTimes(4)">text</div>

и в контроллере:

$scope.getTimes=function(n){
     return new Array(n);
};

http://plnkr.co/edit/j5kNLY4Xr43CzcjM1gkj

ИЗМЕНИТЬ:

с угловыми > 1,2.x

<div ng-repeat="t in getTimes(4) track by $index">TEXT</div>

Ответ 5

Ответ, заданный @mpm, не работает, он дает ошибку

Дубликаты в ретрансляторе не допускаются. Используйте выражение 'track by' для выражения укажите уникальные ключи. Повторитель: {0}, Дублирующий ключ: {1}

Чтобы избежать этого вместе с

ng-repeat = "t в getTimes (4)"

использовать

track by $index

как это

< div ng-repeat = "t в getTimes (4) отслеживать $Индекс" > TEXT </дел >

Ответ 6

Чтобы повторить 7 раз, попробуйте использовать массив с длиной = 7, а затем отслеживать . > $index:

<span ng-repeat="a in (((b=[]).length=7)&&b) track by $index" ng-bind="$index + 1 + ', '"></span>

b=[] создать пустой массив "b",
.length=7 установите размер "7",
&&b пусть новый массив "b" будет доступен для ng-repeat,
track by $index где "$ index" - это позиция итерации.
ng-bind="$index + 1", начиная с 1.

Повторить X раз:
просто замените 7 на X.

Ответ 7

Все ответы здесь, похоже, предполагают, что элементы - это массив. Однако в AngularJS это может быть и объект. В этом случае ни фильтрация с limitTo, ни array.slice не будет работать. В качестве одного из возможных решений вы можете преобразовать свой объект в массив, если не возражаете потерять объектные ключи. Вот пример фильтра, который можно сделать именно так:

myFilter.filter('obj2arr', function() {
    return function(obj) {
        if (typeof obj === 'object') {
            var arr = [], i = 0, key;
            for( key in obj ) {
                arr[i] = obj[key];
                i++;
            }
            return arr;
        }
        else {
            return obj;
        }

    };
});

Как только это массив, используйте slice или limitTo, как указано в других ответах.