2017-02-16 4 views
0

私の角型のアプリケーションでは、空でもオブジェクトもある「カート」という配列があります。私のページにReferボタンを表示しようとしています私の場合は、配列が空でない場合、最大2つのオブジェクトを持つことができます - NowとLater、またはシナリオに基づいたもの。JSONレスポンスのオブジェクトに基づいてページ内に2つの異なるボタンを表示

私はこのようなことをしようとしていますが、どちらの場合でもReferボタンが表示されています。輸出内側

マイHTML-

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

[ファイル] -

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']); 
} 

私はここ

clickToRefer : boolean; 

declared-持って、データはカートを持っている全体の応答性を有します私は応答を正しく取得しています。

誰かが私が間違っていることを知ってくれますか?

+0

なぜdata.result.cart.lengthをif条件内で再度チェックしていますか? –

+0

配列が空でないかどうかを確認するために、配列が空であるかどうかを正しく確認することができませんでした。 –

答えて

1

JSロジックの問題だと思います。 forループの内部

「objは」未定義することができないと、配列の長さは常に> 0となりますので、コードのあなたのサンプルと同じである:私はあなたのデータと思われる

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']); 
} 

。オプションは決して '今'または '後で'ではない?

+1

正確に私のポイント。 OPsの長さ= 0の場合、最初にループに入るのはなぜですか? –

+0

未定義のチェックが必要な場合もありますが、 –

+0

私は常に0と配列-1の長さの間にあるので、data.result.cart [i]は常にデータを持つので、私はそうは思わない。 JSは配列内の未定義の項目を許可しません。 私はオブジェクトのobjをチェックするべきだと思います。 – remib