2017-08-02 1 views
6

J'ai un certain nombre de déclarationsest-il ELSEIF dans angulaire 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> 

conditions multiples dans la déclaration ci-dessus peuvent être vrai.

Mais ce que je veux est, vérifiez d'abord pour la première déclaration si elle est vraie, puis afficher et laisser le reste

Si elle est fausse, vérifiez pour la deuxième et ainsi de suite

comment y parvenir?

+3

double possible de [? Comment utiliser \ * ngIf autre dans angulaire 4] (https://stackoverflow.com/questions/43006550/how-to- use-ngif-else-in-angular-4) – Supamiu

+1

@Supamiu la question est totalement différente, S'il vous plaît lire la description je veux pas juste si et plusieurs conditions peut être vrai, mais je veux afficher le premier qui est vrai et laisse le reste –

+0

@Supamiu j'ai besoin sinon elseif d'autre, pouvez-vous suggérer s'il y a d'autres solut ion –

Répondre

2

Vous pouvez essayer d'utiliser ngIf directive comme:

<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> 

avec ng-container il regardera comme suit:

<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> 

Mais si vous voulez utiliser pour instruction de boucle je peux offrir la solution suivante:

<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> 

conditions

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

Plunker Example

+0

si je l'écris manuellement c'est bien mais peut avoir plusieurs instructions et je le peupler avec une boucle for. l'écriture d'abord, la seconde serait un prob –

+0

peut-être que je peux faire "other1" "other2" pour l'instant. Y a-t-il un autre moyen efficace de penser? –

+0

Pouvez-vous me montrer à quoi ressemblera la boucle? – yurzui

0

Pourquoi ne pas simplement faire plus de travail dans le composant:

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

dans le code composant:

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

J'utilise des formulaires réactifs en Angulaire, le problème survient lorsque j'ai plusieurs validations et que je veux afficher un message d'erreur pour la première validation échouée –

+0

J'ai les chaînes d'erreur de retour de la validation dites firstName.errors.textLength et un tableau contenant des messages d'erreur à afficher correspondant aux validateurs –