2017-12-07 2 views
0

zu verwenden Ich würde diese NgIf über ngClass für einen kürzeren Code umschreiben. Leider wird die Klasse nicht akzeptiert. Kann das Problem gelöst werden?versucht, ngClass statt ngIf

The long Version: 

<div *ngIf="sp.outboundWeeks[i].status=='GREEN'"> 
             <div class="green"> 
              {{sp.outboundWeeks[i].utilizationRate}} 
             </div> 
            </div> 
            <div *ngIf="sp.outboundWeeks[i].status=='RED'"> 
             <div class="red"> 
              {{sp.outboundWeeks[i].utilizationRate}} 
             </div> 
            </div> 
            <div *ngIf="sp.outboundWeeks[i].status=='YELLOW'"> 
             <div class="yellow"> 
              {{sp.outboundWeeks[i].utilizationRate}} 
             </div> 
            </div> 

the short version should be like the code below: 

[ngClass]="{'green':cw.status[i]=='GREEN','yellow':cw.status=='YELLOW','red':cw.status=='RED'}">{{cw.utilizationRate}} 
    </div> 
+1

Ich denke, es sollte funktionieren. Es gibt ein '{' missing => '[ngClass] =" {' –

+0

Hallo Günter, thx für den Hinweis, ich habe die Änderung gemacht, aber leider funktioniert es immer noch nicht – Foch

+0

Zuerst ist es' sp.outboundWeeks [i] .status' , danach ist es 'cw.status [i] == 'GREEN'' Kannst du posten, wie du' cw' bekommst? – DGarvanski

Antwort

1

try this:

<div> 
    <div [ngClass]="(sp.outboundWeeks[i].status=='GREEN') ? 'green' : 
     (sp.outboundWeeks[i].status=='RED') ? 'red' : 'yellow'"> 
     {{sp.outboundWeeks[i].utilizationRate}} 
    </div> 
</div> 
+0

Coole Lösung, könnte aber besser lesbar gemacht werden :) – Abdel

+0

Thx.Abdul Rafay ... es funktioniert! !! – Foch

0

Abdul Rafay Lösungen ist schön, meine Lösung ist meiner Meinung nach expliziter und lesbar :)

<div> 
    <div [class.green]=" sp.outboundWeeks[i].status=='GREEN' " 
     [class.red]=" sp.outboundWeeks[i].status=='RED' " 
     [class.yellow]=" sp.outboundWeeks[i].status=='YELLOW' "> 
     {{sp.outboundWeeks[i].utilizationRate}} 
    </div> 
</div> 
1

Ich gehe davon aus, Ihre Objekte sind wie:

sp = { 
    outboundWeeks: [{ 
     status: 'GREEN', 
     utilizationRate: 'das', 
    }], 
    }; 
    cw = { 
    status: ['GREEN'], 
    utilizationRate: 'sad', 
    }; 

daher die Vorlage sho ULD

<div *ngIf="sp.outboundWeeks[0].status =='GREEN'"> 
     <div class="green"> 
     {{ sp.outboundWeeks[0].utilizationRate }} 
     </div> 
    </div> 
    <div *ngIf="sp.outboundWeeks[0].status=='RED'"> 
     <div class="red"> 
     {{ sp.outboundWeeks[0].utilizationRate }} 
     </div> 
    </div> 
    <div *ngIf="sp.outboundWeeks[0].status=='YELLOW'"> 
     <div class="yellow"> 
     {{ sp.outboundWeeks[0].utilizationRate }} 
     </div> 
    </div> 

    //SHORT HAND 
    <div [ngClass]="{'green': cw.status[0] === 'GREEN', 'yellow': cw.status[0] === 'YELLOW','red': cw.status[0] === 'RED'}"> 
     {{ cw.utilizationRate }} 
    </div> 

zu

ähnlich sein denke ich Ihre Iteration nicht korrekt ist ein bisschen anders als die längere Version, die Sie eingeführt haben, jedoch Coz die kurze Version ist, habe ich eine Probe-Objekt hinzugefügt, Ihnen zu zeigen, wie es funktionieren sollte .

Eine bessere Lösung könnte sein, einfach eine @Pipe zu erstellen, die die richtige Klasse zurückgibt. es sollte viel sauberer und schneller sein.

so etwas wie

<div [ngClass]="status | yourPipe"> 
     {{ cw.utilizationRate }} 
</div> 
+0

Sie haben Recht Majid. Ich bin ein absoluter Anfänger mit Angular 4 und freue mich über jeden kleinen Erfolg;) – Foch

+0

weiterarbeiten und Sie werden ein Angular Master innerhalb der nächsten paar Monate sein: D, keine Sorge. – Majid