...sebagai contoh...
<div class="month" *ngFor="#item of myCollection; #i = index">
...
</div>
Apakah mungkin untuk melakukan sesuatu seperti ...
<div class="month" *ngFor="#item of 10; #i = index">
...
</div>
... tanpa menarik solusi yang tidak elegan seperti:
<div class="month" *ngFor="#item of ['dummy','dummy','dummy','dummy','dummy',
'dummy','dummy','dummy']; #i = index">
...
</div>
?
Jawaban:
Di dalam komponen Anda, Anda dapat menentukan array angka (ES6) seperti yang dijelaskan di bawah ini:
Lihat tautan ini untuk pembuatan array: Cara tersest untuk membuat array bilangan bulat dari 1..20 di JavaScript .
Anda kemudian dapat mengulangi array ini dengan
ngFor
:Atau sebentar lagi:
sumber
Array(5).fill(4)
membuat[4,4,4,4,4]
Array.fill()
dalam Angular 2 Typescript menghasilkan kesalahan berikutSupplied parameters do not match any signature of call t arget.
- Memeriksa dokumen Array.prototype.fill, dikatakan memerlukan 1 argumen ... developer.mozilla.org/en/docs/Web/JavaScript/Reference/…Array(5).fill(1).map((x, i) => i + 1); /*[1,2,3,4,5]*/
ini menyelesaikan kesalahan dalam TS@OP, Anda sudah sangat dekat dengan solusi "tidak elegan" Anda.
Bagaimana tentang:
<div class="month" *ngFor="let item of [].constructor(10); let i = index"> ... </div>
Di sini saya mendapatkan
Array
konstruktor dari array kosong:,[].constructor
karenaArray
bukan simbol yang dikenali dalam sintaks templat, dan saya terlalu malas untuk melakukanArray=Array
ataucounter = Array
dalam skrip komponen seperti @ pardeep-jain dalam contoh ke-4. Dan saya menyebutnya tanpanew
karenanew
tidak perlu mengeluarkan array dariArray
konstruktor.Array(30)
dannew Array(30)
setara.Array akan kosong, tetapi itu tidak masalah karena Anda benar-benar hanya ingin menggunakan
i
dari;let i = index
dalam loop Anda.sumber
<li *ngFor="let number of [0,1,2,3,4]">{{number}}</li>
Belum ada metode untuk NgFor menggunakan angka sebagai pengganti koleksi, Saat ini, * ngFor hanya menerima koleksi sebagai parameter, tetapi Anda bisa melakukan ini dengan metode berikut:
Menggunakan pipa
pipe.ts
Menggunakan array angka secara langsung dalam HTML (Lihat)
Menggunakan metode Split
Menggunakan pembuatan array New di komponen
Demo kerja
sumber
Array.fill()
metode untuk menghasilkan array bukanres.push()
seperti yang ditunjukkan pada jawaban Thierrys.push
? maksud saya kedua metode sudah benar tetapi masih jika ada perbedaan. diantara mereka.Array.fill()
lebih elegan daripada loop menggunakan push dan juga mungkin lebih efisien.counter = Array
, sangat cerdas;)Saya tidak tahan dengan ide mengalokasikan array untuk pengulangan komponen, jadi saya telah menulis arahan struktural. Dalam bentuk paling sederhana, itu tidak membuat indeks tersedia untuk templat, sepertinya ini:
http://plnkr.co/edit/bzoNuL7w5Ub0H5MdYyFR?p=preview
sumber
Saya menyelesaikannya seperti ini menggunakan Angular 5.2.6 dan TypeScript 2.6.2:
Ini dapat digunakan dalam Komponen seperti ini:
Pemeriksaan kesalahan dan pernyataan yang dihilangkan dengan sengaja untuk singkatnya (mis. Apa yang terjadi jika langkah negatif).
sumber
<div *ngfor="let i of 4, i++"></div>
mungkinAnda juga bisa menggunakan seperti itu
HTML
sumber
Anda dapat menggunakan lodash:
Saya tidak menguji kode tetapi harus berhasil.
sumber
<div *ngfor="let i of 4, i++"></div>
mungkini
atau mengindeks dalam kode maka Anda dapat melakukannya*ngFor="let i of range; let i = index"
Ini juga dapat dicapai seperti ini:
HTML:
Naskah:
Demo yang Bekerja
sumber
Karena metode fill () (disebutkan dalam jawaban yang diterima) tanpa argumen melemparkan kesalahan, saya akan menyarankan sesuatu seperti ini (berfungsi untuk saya, Angular 7.0.4, Typescript 3.1.6)
Dalam kode komponen:
sumber
Ini adalah cara yang bagus dan cepat untuk mengulangi jumlah kali di myCollection.
Jadi jika myCollection adalah 5, Hello World akan diulang 5 kali.
sumber
Menggunakan Petunjuk Struktural khusus dengan indeks:
Menurut dokumentasi Angular:
Saat sudut membuat templat dengan memanggil createEmbeddedView, ia juga dapat meneruskan konteks yang akan digunakan di dalamnya
ng-template
.Menggunakan parameter opsional konteks, Anda dapat menggunakannya dalam komponen, mengekstraknya di dalam template seperti halnya dengan * ngFor.
app.component.html:
untuk.directive.ts:
sumber
Silakan temukan terlampir solusi dinamis saya jika Anda ingin meningkatkan ukuran array secara dinamis setelah mengklik tombol (Ini adalah bagaimana saya sampai ke pertanyaan ini).
Alokasi variabel yang diperlukan:
Deklarasikan fungsi yang menambahkan elemen ke array:
Aktifkan fungsi dalam html
Iterate through array dengan ngFor:
sumber
<div *ngfor="let i of 4, i++"></div>
mungkinCara paling sederhana yang pernah saya coba
Anda juga dapat membuat larik dalam file komponen Anda dan Anda dapat menyebutnya dengan * ngFor directive dengan mengembalikannya sebagai larik.
Sesuatu seperti ini ....
Dan fungsi ini dapat digunakan dalam file template html Anda
sumber
<div *ngfor="let i of 4, i++"></div>
mungkinSolusi saya:
Dalam html:
sumber