...na przykład...
<div class="month" *ngFor="#item of myCollection; #i = index">
...
</div>
Można zrobić coś takiego jak ...
<div class="month" *ngFor="#item of 10; #i = index">
...
</div>
... bez odwołania do nie eleganckich rozwiązań takich jak:
<div class="month" *ngFor="#item of ['dummy','dummy','dummy','dummy','dummy',
'dummy','dummy','dummy']; #i = index">
...
</div>
?
Odpowiedzi:
W ramach komponentu możesz zdefiniować tablicę liczb (ES6), jak opisano poniżej:
Zobacz ten link do tworzenia tablicy: Najkrótszy sposób na utworzenie tablicy liczb całkowitych od 1..20 w JavaScript .
Następnie możesz iterować tę tablicę za pomocą
ngFor
:Lub krótko:
źródło
Array(5).fill(4)
aby utworzyć[4,4,4,4,4]
Array.fill()
w Angular 2 Typescript powoduje następujący błądSupplied parameters do not match any signature of call t arget.
- Sprawdzanie dokumentów Array.prototype.fill, mówi, że wymaga 1 argumentu ... developer.mozilla.org/en/docs/Web/JavaScript/Reference/…Array(5).fill(1).map((x, i) => i + 1); /*[1,2,3,4,5]*/
rozwiązuje to błąd w TS@OP, byłeś okropnie blisko ze swoim „nie eleganckim” rozwiązaniem.
Co powiesz na:
<div class="month" *ngFor="let item of [].constructor(10); let i = index"> ... </div>
Tutaj pobieram
Array
konstruktor z pustej tablicy :,[].constructor
ponieważArray
nie jest rozpoznanym symbolem w składni szablonu, i jestem zbyt leniwy, aby to zrobićArray=Array
lubcounter = Array
w skrypcie komponentu, jak @ pardeep-jain w swoim czwartym przykładzie. I nazywam to bez,new
ponieważnew
nie jest to konieczne do uzyskania tablicy zArray
konstruktora.Array(30)
inew Array(30)
są równoważne.Tablica będzie pusta, ale to nie ma znaczenia, ponieważ naprawdę chcesz po prostu korzystać
i
z;let i = index
pętli.źródło
<li *ngFor="let number of [0,1,2,3,4]">{{number}}</li>
Nie, nie ma jeszcze metody dla NgFor do używania liczb zamiast kolekcji. W tej chwili * ngFor akceptuje tylko kolekcję jako parametr, ale można to zrobić za pomocą następujących metod:
Za pomocą rury
pipe.ts
Używanie tablicy liczb bezpośrednio w HTML (Zobacz)
Korzystanie z metody Split
Korzystanie z tworzenia nowej tablicy w komponencie
Działające demo
źródło
Array.fill()
metody do generowania tablicy zamiastres.push()
takiej, jak pokazano w odpowiedzi Thierrys.push
? Mam na myśli, że obie metody są poprawne, ale nadal, jeśli jakieś różnice. między nimi.Array.fill()
bardziej elegancki niż pętla za pomocą push i jest też prawdopodobnie bardziej wydajny.counter = Array
, bardzo inteligentne;)Nie mogłem znieść pomysłu przydzielenia tablicy do zwykłego powtarzania komponentów, dlatego napisałem dyrektywę strukturalną. W najprostszej formie, która nie udostępnia indeksu szablonowi, wygląda to tak:
http://plnkr.co/edit/bzoNuL7w5Ub0H5MdYyFR?p=preview
źródło
Rozwiązałem to w ten sposób, używając Angulara 5.2.6 i TypeScript 2.6.2:
Można go użyć w komponencie takim jak ten:
Sprawdzanie błędów i oświadczenia celowo pominięte ze względu na zwięzłość (np. Co się stanie, jeśli krok jest negatywny).
źródło
<div *ngfor="let i of 4, i++"></div>
może byćmożesz także użyć w ten sposób
HTML
źródło
Możesz użyć lodash:
Nie testowałem kodu, ale powinien działać.
źródło
<div *ngfor="let i of 4, i++"></div>
może byći
lub zindeksujesz kod, możesz to zrobić*ngFor="let i of range; let i = index"
Można to również osiągnąć w następujący sposób:
HTML:
Maszynopis:
Demo pracy
źródło
Ponieważ metoda fill () (wymieniona w zaakceptowanej odpowiedzi) bez argumentów generuje błąd, sugerowałbym coś takiego (działa dla mnie, Angular 7.0.4, Typescript 3.1.6)
W kodzie komponentu:
źródło
Jest to przyjemny i szybki sposób na powtarzanie ilości razy w myCollection.
Więc jeśli myCollection miałoby 5 lat, Hello World byłby powtarzany 5 razy.
źródło
Używanie niestandardowej dyrektywy strukturalnej z indeksem:
Zgodnie z dokumentacją kątową:
Kiedy angular tworzy szablon, wywołując createEmbeddedView, może również przekazać kontekst, który będzie używany w środku
ng-template
.Używając opcjonalnego parametru kontekstowego, możesz go użyć w komponencie, wyodrębniając go w szablonie, tak jak w przypadku * ngFor.
app.component.html:
for.directive.ts:
źródło
Proszę załączyć moje dynamiczne rozwiązanie, jeśli chcecie dynamicznie zwiększać rozmiar tablicy po kliknięciu przycisku (oto jak dostałem się do tego pytania).
Przydział niezbędnych zmiennych:
Zadeklaruj funkcję, która dodaje element do tablicy:
Wywołaj funkcję w HTML
Iteruj po tablicy za pomocą ngFor:
źródło
<div *ngfor="let i of 4, i++"></div>
może byćNajprostszy sposób, który próbowałem
Możesz także utworzyć tablicę w pliku komponentu i wywołać ją za pomocą dyrektywy * ngFor, zwracając jako tablicę.
Coś takiego ....
Tej funkcji można użyć w pliku szablonu HTML
źródło
<div *ngfor="let i of 4, i++"></div>
może byćMoje rozwiązanie:
W html:
źródło