如何绑定到新的Set和Map对象?

时间:2015-05-19 11:40:04

标签: javascript angularjs ecmascript-6

棱角1. * ng-repeat是否适用于SetMap个新对象?

有没有计划整合这个?

2 个答案:

答案 0 :(得分:1)

Angular内部使用for..in运算符来遍历非数组对象。 Proof-link to the sourcesMapSet不能通过这种方式进行迭代,它们应该通过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扩展为绑定到键或键值对。