KnockoutJSコンテナーレスバインディング構文
しばらくお待ちください。KnockoutJSにforeach
は、foreach
バインディングドキュメントの注4で説明されているように、バインディングにコンテナレスバインディング構文を使用するという非常に便利なオプションが用意されています。
http://knockoutjs.com/documentation/foreach-binding.html
Knockoutドキュメントの例が示すように、次のようにKnockoutJSでバインディングを記述できます。
<ul>
<li class="header">Header item</li>
<!-- ko foreach: myItems -->
<li>Item <span data-bind="text: $data"></span></li>
<!-- /ko -->
</ul>
残念なことに、AngularJSはこのタイプの構文を提供していません。
Angular ng-repeat-start
とng-repeat-end
ng-repeat
問題を解決するAngularJSの方法で、私が遭遇するサンプルは、彼の(役立つ)回答に投稿されたjmagnussonタイプのサンプルです。
<li ng-repeat-start="page in [1,2,3,4,5]"><a href="#">{{page}}</a></li>
<li ng-repeat-end></li>
この構文を見たときの私の最初の考えは、次のとおりです。なぜAngularは、この余分なマークアップをすべて、私が何もしたくないものを強制しているのですが、Knockoutの方がはるかに簡単です。しかし、jmagnussonの答えにあるhitautodestructのコメントに疑問が生じ始めました。別のタグでng-repeat-startとng-repeat-endで何が生成されているのでしょうか。
よりクリーンな使用方法ng-repeat-start
とng-repeat-end
hitautodestructの主張の調査の結果、追加ng-repeat-end
別のタグににすると、私は考えまさにあるではない、それは全くusesless要素を生成しているため、ほとんどのケースでやりたい。この場合は、<li>
その中の何ものアイテム。Bootstrap 3のページ付けされたリストはリストアイテムのスタイルを設定しているため、余分なアイテムを生成していないように見えますが、生成されたhtmlを検査すると、そこにあります。
幸いなことに、よりクリーンなソリューションとより短い量のhtmlを作成するために多くのことを行う必要はありません。宣言をと同じhtmlタグに置くだけng-repeat-end
ng-repeat-start
です。
<ul class="pagination">
<li>
<a href="#">«</a>
</li>
<li ng-repeat-start="page in [1,2,3,4,5]" ng-repeat-end><a href="#"></a></li>
<li>
<a href="#">»</a>
</li>
</ul>
これには3つの利点があります。
- 書くhtmlタグを減らす
- 役に立たない、空のタグはAngularによって生成されません
- 繰り返す配列が空の場合、タグ
ng-repeat
が生成されないため、Knockoutのコンテナーレスバインディングと同じ利点が得られます。
しかし、まだよりクリーンな方法があります
角度のために、この問題にgithubののコメントを検討し、さらに後、https://github.com/angular/angular.js/issues/1891、
あなたが使用する必要はありませんng-repeat-start
し、ng-repeat-end
同じ利点を達成します。代わりに、jmagnussonの例を再度フォークして、次のように実行できます。
<ul class="pagination">
<li>
<a href="#">«</a>
</li>
<li ng-repeat="page in [1,2,3,4,5,6]"><a href="#">{{page}}</a></li>
<li>
<a href="#">»</a>
</li>
</ul>
だから、ときに使用するng-repeat-start
とng-repeat-end
?あたりとして、角度のドキュメントへ
...親要素を1つだけではなく、一連の要素を繰り返す...
十分な話、いくつかの例を示してください!
けっこうだ; このjsbinはng-repeat-end
、同じタグで使用した場合と使用しない場合の結果の5つの例を示します。