棱角1. * ng-repeat是否适用于Set
和Map
个新对象?
有没有计划整合这个?
答案 0 :(得分:1)
Angular内部使用for..in
运算符来遍历非数组对象。 Proof-link to the sources。 Map
和Set
不能通过这种方式进行迭代,它们应该通过for..of
进行迭代。因此,您无法在ng-repeat
使用此集合,无需任何额外转换。
即将推出的Angular 2具有ES6功能支持,并且它也具有重复的语法。有关详细信息,请参阅angular 2 docs。
答案 1 :(得分:0)
我尝试将Map
绑定到Angular 2中的ng-repeat
。即使使用*ngFor="let item of items"
它也无效。相反,这解决了我的问题:
/*
* Extension of the ES6 map, which also supports binding to it's array of values
*/
class BindableMap extends Map {
constructor(...args) {
super(...args);
this.bindableValues = [];
}
updateBindableValues() {
// Clear the array without creating a new one.
this.bindableValues.length = 0;
// Push all the new values
this.bindableValues.push(...Array.from(super.values()));
}
clear(...args) {
super.clear(...args);
this.updateBindableValues();
}
set(...args) {
super.set(...args);
this.updateBindableValues();
}
delete(...args) {
super.delete(...args);
this.updateBindableValues();
}
}
这样您也可以在Angular 1.x中使用ng-repeat="value in map.bindableValues"
。
请注意,这不是最有效的解决方案,因为可以在地图的每次更改时重新创建可绑定值。为了我的目的,它足够了。此外,如果您愿意,也可以将BindableMap
扩展为绑定到键或键值对。