ng-repeat работает только для перебора List, а не Iterable или Set

Кажется, невозможно перебрать что-либо еще, кроме списка, с помощью ng-repeat.

Например, как ни странно, следующий код не работает:

<span ng-repeat="i in [1, 2, 3].toSet()>{{i}}</span>

Исключение выдается по адресу package:angular/directive/ng_repeat.dart:126:8:

type '_LinkedHashSet' is not a subtype of type 'List'

Кажется очень ограничительным ограничить ng-repeat правильным списком. Возможно, ng-repeat выполняет итерацию по любому итерируемому объекту, а не только по списку.

Оливер


person odwl    schedule 08.12.2013    source источник
comment
Почему вы хотите использовать Set? Можешь описать?   -  person Maxim Shoustin    schedule 08.12.2013
comment
Набор не определяет четко порядок своих элементов, и если порядок зависит от времени или неопределен, то я бы предпочел, чтобы мой список не менялся с каждой итерацией цикла $digest. Кроме того, насколько я могу судить, в Javascript нет интерфейса Iterable.   -  person musically_ut    schedule 08.12.2013
comment
Хорошо, я не хотел использовать Set, я хотел использовать сгенерированный итерируемый объект: myList.where((x) => myfilter(x) и чтобы он работал, я добавляю для воссоздания списка: myList.where((x) => myfilter(x)).toList(). Что касается набора, набор может быть упорядоченным набором, так что это может иметь смысл. Мы предполагаем создавать список каждый раз, когда мы используем ng-repeat?   -  person odwl    schedule 08.12.2013


Ответы (1)


Это известное ограничение (https://github.com/angular/angular.dart/issues/292), главным образом потому, что ng-repeat использует оператор [], который Iterable не поддерживает. Тем не менее, angular может внутренне преобразовывать Iterable в List, что упрощает работу пользователя.

person pavelgj    schedule 08.12.2013