...beispielsweise...
<div class="month" *ngFor="#item of myCollection; #i = index">
...
</div>
Ist möglich so etwas wie ...
<div class="month" *ngFor="#item of 10; #i = index">
...
</div>
... ohne Appell an eine nicht elegante Lösung wie:
<div class="month" *ngFor="#item of ['dummy','dummy','dummy','dummy','dummy',
'dummy','dummy','dummy']; #i = index">
...
</div>
?
Antworten:
Innerhalb Ihrer Komponente können Sie ein Array von Zahlen (ES6) wie folgt definieren:
Informationen zur Array-Erstellung finden Sie unter diesem Link: Die engste Methode zum Erstellen eines Arrays von Ganzzahlen aus 1..20 in JavaScript .
Sie können dann über dieses Array iterieren mit
ngFor
:Oder kurz:
quelle
Array(5).fill(4)
zu erstellen[4,4,4,4,4]
Array.fill()
in Angular 2 Typescript führt zu folgendem FehlerSupplied parameters do not match any signature of call t arget.
: Wenn Sie die Dokumente Array.prototype.fill überprüfen, wird 1 Argument benötigt ... developer.mozilla.org/en/docs/Web/JavaScript/Reference/…Array(5).fill(1).map((x, i) => i + 1); /*[1,2,3,4,5]*/
Dies behebt den Fehler in TS@OP, Sie waren mit Ihrer "nicht eleganten" Lösung furchtbar nah dran.
Wie wäre es mit:
<div class="month" *ngFor="let item of [].constructor(10); let i = index"> ... </div>
Hier erhalte ich den
Array
Konstruktor aus einem leeren Array :[].constructor
, weilArray
es in der Vorlagensyntax kein erkanntes Symbol ist und ich zu faul bin, dies zu tun,Array=Array
odercounter = Array
im Komponententypskript, wie es @ pardeep-jain in seinem vierten Beispiel getan hat. Und ich rufe es ohne auf,new
weilnew
es nicht notwendig ist, ein Array aus demArray
Konstruktor herauszuholen .Array(30)
undnew Array(30)
sind gleichwertig.Das Array wird leer sein, aber das spielt keine Rolle , weil Sie wirklich nur verwenden möchten
i
von;let i = index
in der Schleife.quelle
<li *ngFor="let number of [0,1,2,3,4]">{{number}}</li>
Nein, es gibt noch keine Methode für NgFor, bei der Zahlen anstelle von Sammlungen verwendet werden. Derzeit akzeptiert * ngFor nur eine Sammlung als Parameter. Sie können dies jedoch mit den folgenden Methoden tun:
Rohr verwenden
pipe.ts
Verwenden des Zahlenarrays direkt in HTML (Ansicht)
Verwenden der Split-Methode
Verwenden des Erstellens eines neuen Arrays in einer Komponente
Arbeitsdemo
quelle
Array.fill()
Methode zum Generieren des Arrays verwenden, anstattres.push()
wie in Thierrys Antwort gezeigt.push
? Ich meine, beide Methoden sind korrekt, aber immer noch, wenn es Unterschiede gibt. zwischen ihnen.Array.fill()
eleganter als die Schleife mit Push und es ist wahrscheinlich auch effizienter.counter = Array
, sehr klug;)Ich konnte die Idee nicht ertragen, ein Array für die einfache Wiederholung von Komponenten zuzuweisen, deshalb habe ich eine strukturelle Direktive geschrieben. In der einfachsten Form, die den Index für die Vorlage nicht verfügbar macht, sieht es folgendermaßen aus:
http://plnkr.co/edit/bzoNuL7w5Ub0H5MdYyFR?p=preview
quelle
Ich habe es so gelöst mit Angular 5.2.6 und TypeScript 2.6.2:
Es kann in einer Komponente wie der folgenden verwendet werden:
Fehlerprüfung und Behauptungen wurden der Kürze halber absichtlich weggelassen (z. B. was passiert, wenn der Schritt negativ ist).
quelle
<div *ngfor="let i of 4, i++"></div>
möglichSie können auch so verwenden
HTML
quelle
Sie können lodash verwenden:
Ich habe keinen Code getestet, aber es sollte funktionieren.
quelle
<div *ngfor="let i of 4, i++"></div>
möglichi
einen Code benötigen oder indizieren, können Sie dies tun*ngFor="let i of range; let i = index"
Dies kann auch folgendermaßen erreicht werden:
HTML:
Typoskript:
Arbeitsdemo
quelle
Da die fill () -Methode (in der akzeptierten Antwort erwähnt) ohne Argumente einen Fehler auslöst, würde ich so etwas vorschlagen (funktioniert für mich, Angular 7.0.4, Typescript 3.1.6).
Im Komponentencode:
quelle
Dies ist eine schöne und schnelle Möglichkeit, die Anzahl der Male in myCollection zu wiederholen.
Wenn myCollection also 5 wäre, würde Hello World 5 Mal wiederholt.
quelle
Verwenden einer benutzerdefinierten Strukturrichtlinie mit Index:
Laut Angular-Dokumentation:
Wenn Angular eine Vorlage durch Aufrufen von createEmbeddedView erstellt, kann auch der Kontext übergeben werden, der im Inneren verwendet wird
ng-template
.Mit dem optionalen Kontextparameter können Sie ihn in der Komponente verwenden und ihn wie mit * ngFor in der Vorlage extrahieren.
app.component.html:
for.directive.ts:
quelle
Im Anhang finden Sie meine dynamische Lösung, wenn Sie die Größe eines Arrays nach dem Klicken auf eine Schaltfläche dynamisch erhöhen möchten (so bin ich zu dieser Frage gekommen).
Zuordnung der notwendigen Variablen:
Deklarieren Sie die Funktion, die dem Array ein Element hinzufügt:
Rufen Sie die Funktion in HTML auf
Durch das Array mit ngFor iterieren:
quelle
<div *ngfor="let i of 4, i++"></div>
möglichEin einfachster Weg, den ich versucht habe
Sie können auch ein Array in Ihrer Komponentendatei erstellen und es mit der Direktive * ngFor aufrufen, indem Sie als Array zurückkehren.
Etwas wie das ....
Und diese Funktion kann in Ihrer HTML-Vorlagendatei verwendet werden
quelle
<div *ngfor="let i of 4, i++"></div>
möglichMeine Lösung:
In HTML:
quelle