2016-09-06 4 views
0

を呼び出すngFor:次作品の関数Angular2

*ngFor="let child of items || []; let i = index;" 

これはしていません:

*ngFor="let child of items || []; let specialVersionOfI = someFunction(index);" 

私が手:

Parser Error: Unexpected token (, expected identifier, keyword, or string at column 56 in [ngFor let child of items | 

は、この背後にある理由は何だ、とあります変わる?

+0

|| []は混乱しているパーサーかもしれませんが、それを '(items || [])'に変更してかっこで囲みます。 –

+0

残念ながら、私はまだ同じ問題を抱えています:( – David

答えて

1

インデックスを割り当てるときではなく、ループ内で後でこの関数を使用します。

<u> 
    <li *ngFor="let item of items || []; let i=index"> 
     use function here >> {{someFunction(i)}} 
    </li> 
</u> 

See this plunker.

また、テンプレートの中からアクセス、モデルの配列を操作し、第2の並列配列の特別なインデックスを格納することができます。

<u> 
    <li *ngFor="let item of items || []; let i=index"> 
     access special index >> {{customIndices[i]}} 
    </li> 
</u> 
+0

'* ngFor' Angularコンパイルが実行されると、複数のバインディングにコンパイルされます。ngForの構文はよく文書化されていません(少なくとも、現在どのように構文解析が行われているかについての包括的なガイドラインは見つかりませんでした)できるだけシンプルにしておき、@ BeetleJuiceが提案するようにループの中にカスタムロジックを追加する方が良いです – Yiou

1

はるかに読みやすいコンポーネントでのマッピングを持つバージョン、のようなSTH次のようになります。私は `アイテムを推測

this.items.map((child, i) => { child['specialVersionOfI'] = this.someFunction(i); return child; }) して、テンプレート内だけ{{child.specialVersionOfI}}

+0

これは明らかな回避策です。実際これは私が今使っているものですが、まだ解決策はありますか?私は彼らがこれをすぐに実装しようとしているのだろうかと疑問に思っていますか? – David

+1

正直言って私は回避策だとは思わないでしょう。どの決定をしたのか、そしてどこで何らかの計算をする。 – be4code