Bagaimana saya memiliki banyak kasus dalam sebuah *ngIf
pernyataan? Aku digunakan untuk Vue atau sudut 1 dengan memiliki if
, else if
, dan else
, tetapi tampaknya seperti sudut 4 hanya memiliki true
( if
) dan false
( else
) kondisi.
Menurut dokumentasi, saya hanya dapat melakukan:
<ng-container *ngIf="foo === 1; then first else second"></ng-container>
<ng-template #first>First</ng-template>
<ng-template #second>Second</ng-template>
<ng-template #third>Third</ng-template>
Tetapi saya ingin memiliki banyak kondisi (seperti):
<ng-container *ngIf="foo === 1; then first; foo === 2; then second else third"></ng-container>
<ng-template #first>First</ng-template>
<ng-template #second>Second</ng-template>
<ng-template #third>Third</ng-template>
Tapi saya akhirnya harus menggunakan ngSwitch
, yang terasa seperti retasan:
<ng-container [ngSwitch]="true">
<div *ngSwitchCase="foo === 1">First</div>
<div *ngSwitchCase="bar === 2">Second</div>
<div *ngSwitchDefault>Third</div>
</ng-container>
Bergantian, sepertinya banyak sintaks yang saya gunakan dari Angular 1 dan Vue tidak didukung di Angular 4, jadi apa cara yang direkomendasikan untuk menyusun kode saya dengan kondisi seperti ini?
angular
templates
angular-ng-if
Alexander Abakumov
sumber
sumber
Jawaban:
Alternatif lain adalah dengan kondisi sarang
sumber
<ng-template #second *ngIf="foo === 2;else third">
Anda bisa menggunakan:
kecuali bagian ng-container penting untuk desain Anda, saya kira.
Ini Plunker
sumber
if (index === 1) else if (foo === 2)
yang harus ditulisif (index === 1) if (index !== 1 && foo === 2)
yang agak berantakan dan lebih rentan terhadap kesalahan, semakin sering kita harus menulis logika terbalik.if (item === 'food' && kind === 'hamburger') {} else if (item === 'food' && kind === 'hotdog') {} else if (item === 'drink' && kind === 'beer') {} else if (item === 'drink' && kind === 'wine') {} else { /* could be poisonous */ }
NgTemplateOutlet
dengan konteks seperti * ngTemplateOutlet = "drink; context: beer", atau mungkin komponen lain untuk kategorisasi.Ini sepertinya cara terbersih untuk dilakukan
di dalam template:
Perhatikan bahwa ini berfungsi seperti
else if
pernyataan yang tepat jika kondisi melibatkan variabel yang berbeda (hanya 1 kasus yang benar pada satu waktu). Beberapa jawaban lain tidak berfungsi dengan baik dalam kasus seperti itu.samping: astaga, itu beberapa
else if
kode template yang sangat jelek ...sumber
Anda dapat menggunakan berbagai cara berdasarkan sitaution:
Jika Variabel Anda terbatas pada Angka atau String tertentu , cara terbaik adalah menggunakan ngSwitch atau ngIf:
Di atas tidak cocok untuk kode if elseif lain dan kode dinamis, Anda dapat menggunakan kode di bawah ini:
sumber
*ngIf="foo >= 7; then t7"
bukan... else t7
.foo >= 4 && foo <= 6; then t46; else t7
harus bekerja.Untuk menghindari bersarang dan ngSwitch, ada juga kemungkinan ini, yang memanfaatkan cara kerja operator logika di Javascript:
sumber
Atau mungkin gunakan saja rantai kondisional dengan operator terner.
if … else if … else if … else
rantai.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator#Conditional_chains
Saya lebih suka pendekatan ini.
sumber
sumber
Anda juga dapat menggunakan trik lama ini untuk mengonversi blok if / then / else kompleks menjadi pernyataan switch yang sedikit lebih bersih:
sumber