2016-05-21 3 views
1

インデックスを使用して計算を行うにはどうすればよいですか?条件が真であるときにクラスの危険を適用したいが、* ngForループ内でi-1を計算する必要がある。* ngForでインデックスを減算する

<tr *ngFor="#org of data; #i = index"> 
    <td [ngClass]="{danger: org.price < data.stock[i-1].val }"> 
</tr> 
+0

問題のコードにはどのような問題がありますか? –

+0

次のdata.stock [i-1] .valでは、未定義のプロパティvalを読み取ることができません。静的な番号を使用するとうまく動作します。 – Konst

答えて

1

これは、i-1が動作していないことが原因ではないことは間違いありません。
インデックスは0で始まります。したがって、配列の-1のインデックスへのアクセスが無効であるため、data.stock[-1]が無効であるという問題があると思います。

+1

問題は、配列の無効なインデックスでした。 – Konst

+0

ところで、NG1はエラーなしでこれをやります(!) – Konst

+0

私はNG1をうまく知りません。多分、そのインデックスは '1'で始まるでしょう。 –

1

次の例のように、カスタム関数に必要なすべての計算を行うことができます。

@Component({ 
    selector: 'my-app', 
    template: `<table> 
       <tr *ngFor="let org of data; let i = index"> 
       <td [ngClass]="{danger: org.price < org.stock[getIndex(i)].val }"> 
       ... 
}) 
export class AppComponent implements OnInits { 
    ... 
    // this is your custom function to set index as you need 
    getIndex(index){ 
     var result = index - 1; 
     if (result < 0 || result > 0) result = 0; 
     return result; 
    } 
} 

here

注意私の簡単な例を参照してください:

  • ギュンターが指摘@として:負のインデックスが無効です
  • data propertyオブジェクトの配列またはオブジェクトだけ?それは、各オブジェクトがstockと呼ばれる追加の配列プロパティを持つオブジェクトの配列でなければならないようです。
  • *ngFor内の#組織は廃止されており、代わりにletを使用する必要があります。