2017-08-02 20 views
6

Mam szereg sprawozdańCzy istnieje elseif w Kątowymi 4

<ng-template [ngIf]="xyz== 1">First</ng-template> 
<ng-template [ngIf]="pqr == 2">Second</ng-template> 
<ng-template [ngIf]="abc == 3">Third</ng-template> 

Wiele warunki powyższe stwierdzenie może być prawdziwe.

Ale co chcę jest najpierw sprawdzić pierwsze pismo jeśli prawdą następnie wyświetlić i zostawić resztę

Jeśli false, a następnie sprawdzić na drugi i tak dalej

jak to osiągnąć?

+3

Możliwy duplikat [? Jak używać \ * ngIf indziej w Kątowymi 4] (https://stackoverflow.com/questions/43006550/how-to- use-ngif-else-in-angle-4) – Supamiu

+1

@Supamiu pytanie jest całkowicie inne, Przeczytaj opis Nie chcę tylko, jeśli i jeszcze: wiele warunków może być prawdą, ale chcę wyświetlić pierwszy, który jest prawdą i zostaw resztę –

+0

@Supamiu, czego potrzebuję, jeśli w przeciwnym wypadku, możesz zasugerować, czy istnieje jakikolwiek inny ion –

Odpowiedz

2

Można spróbować użyć dyrektywy ngIf jak:

<ng-template [ngIf]="xyz == 1" [ngIfElse]="second">First</ng-template> 
<ng-template #second> 
    <ng-template [ngIf]="pqr == 2" [ngIfElse]="third">Second</ng-template> 
</ng-template> 
<ng-template #third> 
    <ng-template [ngIf]="abc == 3">Third</ng-template> 
</ng-template> 

z ng-container będzie wyglądać następująco:

<ng-container *ngIf="xyz == 1; else second">First</ng-container> 
<ng-template #second> 
    <ng-container *ngIf="pqr == 2; else third">Second</ng-container> 
</ng-template> 
<ng-template #third> 
    <ng-container *ngIf="abc == 3">Third</ng-container> 
</ng-template> 

Ale jeśli chcesz używać dla instrukcji pętli mogę zaoferować następujące rozwiązanie:

<ng-container *ngTemplateOutlet="next; context: { $implicit: 0 }"></ng-container> 

<ng-template #next let-i> 
    <ng-container *ngIf="conditions[i]"> 
    <ng-container *ngIf="conditions[i] && conditions[i].condition(); else shift">{{ conditions[i].result }}</ng-container> 
     <ng-template #shift > 
     <ng-container *ngTemplateOutlet="next; context: { $implicit: i + 1 }"></ng-container> 
     </ng-template> 
    </ng-container> 
</ng-template> 

gdzie conditions

conditions = [ 
    { 
    condition:() => this.xyz === 1, 
    result: 'First' 
    }, 
    { 
    condition:() => this.pqr === 2, 
    result: 'Second' 
    }, 
    { 
    condition:() => this.abc === 3, 
    result: 'Third' 
    } 
]; 

Plunker Example

+0

, jeśli zapiszę go ręcznie, ale może mieć wiele instrukcji i zapełnianie go pętlą for. pisząc pierwszy, drugi byłby prawdopodobnie –

+0

może mogę teraz zrobić "other1" "other2". Czy jest jakiś inny skuteczny sposób, jaki możesz wymyślić? –

+0

Czy możesz mi pokazać, jak będzie wyglądać pętla? – yurzui

0

Dlaczego po prostu nie robić więcej pracy w komponencie:

<ng-template [ngIf]="status == 'first'">First</ng-template> 
<ng-template [ngIf]="status == 'second'">Second</ng-template> 
<ng-template [ngIf]="status == 'third'">Third</ng-template> 

w kodzie składnika:

status string; 
if (xyz == 1) 
    status = 'first'; 
else if (pqr == 2) 
    status = 'second'; 
else if (abc == 3) 
    status = 'third'; 
+0

Używam formularzy reaktywnych w Angular, problem pojawia się, gdy mam wiele walidacji i chcę pokazać komunikat o błędzie dla pierwszej nieudanej walidacji –

+0

Mam ciągi błędów zwracania tej validation powiedzieć firstName.errors.textLength i tablicy zawierające komunikaty o błędach do wyświetlenia odpowiadające walidatorom –