Dalam komponen Angular 2 saya, saya memiliki array yang dapat diamati
list$: Observable<any[]>;
Di Template saya, saya punya
<div *ngIf="list$.length==0">No records found.</div>
<div *ngIf="list$.length>0">
<ul>
<li *ngFor="let item of list$ | async">item.name</li>
</ul>
</div>
Tetapi list $ .length tidak berfungsi jika ada array Observable.
Memperbarui:
Tampaknya (list $ | async) ?. length memberi kita panjang tetapi kode di bawah ini masih tidak berfungsi:
<div>
Length: {{(list$ | async)?.length}}
<div *ngIf="(list$ | async)?.length>0">
<ul>
<li *ngFor="let item of (list$ | async)">
{{item.firstName}}
</li>
</ul>
</div>
</div>
Adakah yang bisa memandu bagaimana cara memeriksa panjang array yang dapat diamati.
angular
observable
angular2-template
angular2-services
Naveed Ahmed
sumber
sumber
Jawaban:
Anda bisa menggunakan
| async
pipa:Pembaruan - Angular Versi 6:
Jika Anda memuat kerangka css, Anda dapat menggunakan ini. Jika array tidak memiliki item, itu akan menampilkan template css. Jika ada data isikan
ngFor
.sumber
<div *ngIf="(list$ | async)?.length==0">No records found.</div>
(ditambahkan?
)?
diperlukan karenalist$
hanya disetel setelah Angular2 mencoba merender tampilan untuk pertama kalinya.?
mencegah sisa sub-ekspresi dievaluasi hingga bagian kiri?
menjadi!= null
(Elvis atau operator navigasi aman).async
pipa pertama menyelesaikan data dan oleh karena ituasync
pipa berikutnya pada loop saya tidak menampilkan apa pun. Atau mungkin*ngIf
membuat cakupan tambahan dan karena itu tidak berfungsi. Sulit dikatakan. Tetapi sementara loop saya dibungkus di dalam if, itu tidak menampilkan data apa pun. Jika mengevaluasi dengantrue
benar.Solusi untuk .ts-Files:
sumber
onDestroy
komponenUntuk Angular 4+, coba ini
sumber
Padahal jawaban ini benar
Perlu diingat bahwa jika Anda menggunakan klien http untuk memanggil backend (dalam banyak kasus Anda melakukannya), Anda akan mendapatkan panggilan duplikat ke API Anda jika Anda memiliki lebih dari satu daftar $ | async . Ini karena masing-masing | pipa async akan membuat pelanggan baru ke daftar Anda $ observable.
sumber
Inilah yang berhasil untuk saya -
Saya mendapatkan data saya dari httpClient async.
Semua opsi lain di sini tidak berfungsi untuk saya yang mengecewakan. Terutama pipa seksi (daftar $ | asinkron).
Basa ..
sumber
Pendekatan Anda di sini memiliki masalah besar lainnya: dengan memanfaatkan pipa asinkron berulang kali di templat Anda, Anda sebenarnya memulai banyak langganan ke satu Observable.
KAMRUL HASAN SHAHED memiliki pendekatan yang benar di atas: Gunakan pipa asinkron satu kali dan kemudian berikan alias untuk hasil yang dapat Anda manfaatkan di node anak.
sumber
Bisa disingkat juga:
Cukup gunakan tanda seru sebelum tanda kurung.
sumber
ionik 4
itu berhasil ketika saya menghapus
$
tanda itusumber