2017-12-15 3 views
1

Ich versuche, eine Karte in meiner Vorlage anzuzeigen:Anzeigekarteninhalt in Winkel 4 Vorlage

myMap : Map<string, Array<ATypeOfMine>> 

Versucht ein

<div *ngFor="let myStuff of myMap.entries()"> 
    ... 
</div> 

zu verwenden, erhalte ich einen Fehler erzählen kann ich‘ t iterieren über alles außer einem Array. Und ich finde keine Möglichkeit, meine Einträge zu bekommen und an ihnen zu arbeiten

Irgendeine Idee?

Antwort

1

der richtige Weg ist

get mapEntries() { return Array.from(this.myMap.entries()); } 

in Ihrem HTML

<xxx *ngFor="let mapEntry of mapEntries">{{ myMap.get(mapEntry[0]) }}</xxx> 
+0

.entries() wird nicht gefunden, als wäre myMap keine Karte. stimmt etwas mit der myMap-erklärung nicht? – Seb

+0

Ist es möglich, dass meine App nicht richtig konfiguriert ist, meine .entries() zu es5 zu übertragen? – Seb

1

map.entries() gibt ein MapIterator, die Sie über .next mit laufen kann. *ngFor iteriert nur über Arrays und iteriert nicht mit der iterator protocol, die MapIterator implementiert.

Maps are intentionally not supported weil sie nicht ordinal sind.

Wenn Sie .entries in ein Array umwandeln möchten Sie so über Array.from() tun können, was werden Sie eine Reihe geben, die wie folgt aussieht:

[["key1", "val1"], ["key2", "val2"]] 

Sie auch Array.from(map.keys()) verwenden könnte, die ["key1", "key2"] zurückkehren und man konnte über iterieren es etwa so:

<div *ngFor="let key of mapKeys">{{ myMap.get(key) }}</div> 

Sie auch ein Rohr schaffen könnte auch die Karte auf ein Array zu transformieren:

import { Pipe, PipeTransform } from '@angular/core'; 
@Pipe({name: 'mapToArray'}) 
export class MapToArray implements PipeTransform { 
    transform(value: Map): Array { 
    const entries = value.entries(); 
    const result = []; 
    let done = false; 
    while (!done) { 
     const { value: currentValue, done: isDone } = entries.next(); 
     result.push(currentValue); 
     done = isDone; 
    } 
    return result; 
    } 
} 

Sie könnten dann verwenden, was Sie als *ngFor="let values of myMap | mapToArray" haben

Zusammengefasst, wie Sie es viele verschiedene Möglichkeiten gibt, sehen Sie eine Karte Iteration über die etwas mit, warum es tut zu tun hat, nicht verarbeiten kann Standardmäßig arbeiten. Es liegt an Ihnen, den besten Weg zu finden, abhängig von Ihrem Anwendungsfall (wenn Sie zum Beispiel die Schlüssel benötigen).

+0

Trotzdem ist es eine gute Lösung, es fühlt sich merkwürdig an, dass es nicht heimisch ist, oder? – Seb

+1

@Seb es ist nicht nativ, weil es so viele verschiedene mögliche Lösungen gibt –