2017-02-16 1 views
0

In meiner eckigen App habe ich ein Array namens "cart", das leer sein kann oder einige Objekte hat. Ich versuche, die Schaltfläche Refer auf meiner Seite anzuzeigen immer wenn das Array leer ist. Wenn das Array Objekte hat, sollte es trotzdem die Buy-Schaltfläche anzeigen. In meinem Fall, wenn das Array nicht leer ist, kann es maximal zwei Objekte haben - Now and Later oder jedes basierend auf den Szenarien .Zeigen Sie zwei verschiedene Schaltflächen auf einer Seite basierend auf den Objekten in einer JSON-Antwort an.

Ich versuche so etwas, aber in beiden Fällen wird die Verweistaste angezeigt.

Mein html-

<div class="col-md-12"> 
    <button *ngIf="clickToRefer">Buy</button>  
    <button *ngIf="!clickToRefer">Refer</button>  
</div> 

In meinem .ts

datei
if (data) { 
    for (var i = 0; i < data.result.cart.length; i++) { 
     var obj = data.result.cart[i]; 
     if ((obj !== undefined) && 
      (data.result.cart.length > 0) && 
      ((obj.option == 'Now') || (obj.option == 'Later'))) { 
      this.clickToRefer = true; 
     } else { 
      this.clickToRefer = false; 
     } 
    }   
    this.router.navigate(['/home']); 
} 

innerhalb Export ich habe declared-

clickToRefer : boolean; 

Hier werden Daten die gesamte Antwort hat, die Warenkorb hat Array.Ich bekomme die Antwort richtig.

Kann mir jemand helfen zu wissen, wo ich falsch liege?

+0

Warum überprüfen Sie data.result.cart.length erneut in der if-Bedingung? –

+0

Um sicherzustellen, dass das Array nicht leer ist. Es konnte nicht überprüft werden, ob das Array leer ist oder nicht. –

Antwort

1

Ich denke, es ist nur ein JS-Problem, nicht eckig.

Innerhalb der for-Schleife „obj“ kann nicht undefiniert sein und die Länge des Feldes wird immer> 0, so der Code Ihrer Probe die gleiche ist, wie:

if (data) { 
    for (var i = 0; i < data.result.cart.length; i++) { 
     var obj = data.result.cart[i]; 
     if ((obj.option == 'Now') || (obj.option == 'Later')) { 
      this.clickToRefer = true; 
     } else { 
      this.clickToRefer = false; 
     } 
    }   
    this.router.navigate(['/home']); 
} 

ich, dass Ihre Daten vermuten .option ist niemals "Jetzt" oder "Später"?

+1

Genau mein Punkt. Warum sollte es überhaupt in die Schleife eintreten, wenn die Länge in den OPs gleich 0 ist? Qs –

+0

Obwohl ich nach undefiniert gesucht habe, nehme ich an. –

+0

Ich denke nicht, weil die i immer zwischen 0 und der Länge des Arrays - 1 sein wird, so dass data.result.cart [i] immer Daten haben wird. JS erlaubt keine undefinierten Elemente in einem Array. Ich denke, die Überprüfung sollte für obj ein Objekt sein. – remib

Verwandte Themen