あなたの提案をありがとう、あなたは私を正しい道に導きました!
完全な説明に行きましょう:
デフォルトでは、AngularJS http getクエリはオブジェクトを返します
したがって、@ Ariel Array.prototype.chunk関数を使用する場合は、まずオブジェクトを配列に変換する必要があります。
そして、チャンク関数をコントローラーで使用するには、ng-repeatに直接使用する場合はinfdigエラーが発生します。最終的なコントローラーは次のようになります。
// Initialize products to empty list
$scope.products = [];
// Load products from config file
$resource("/json/shoppinglist.json").get(function (data_object)
{
// Transform object into array
var data_array =[];
for( var i in data_object ) {
if (typeof data_object[i] === 'object' && data_object[i].hasOwnProperty("name")){
data_array.push(data_object[i]);
}
}
// Chunk Array and apply scope
$scope.products = data_array.chunk(3);
});
そしてHTMLは次のようになります:
<div class="row" ng-repeat="productrow in products">
<div class="col-sm-4" ng-repeat="product in productrow">
一方、JSONファイルからオブジェクト{}ではなく配列[]を直接返すことにしました。このようにして、コントローラーは次のようになります(特定の構文isArray:trueに注意してください):
// Initialize products to empty list
$scope.products = [];
// Load products from config file
$resource("/json/shoppinglist.json").query({method:'GET', isArray:true}, function (data_array)
{
$scope.products = data_array.chunk(3);
});
HTMLは上記と同じです。
最適化
サスペンスの最後の質問は、チャンク関数でjavascript配列を拡張せずに100%AngularJSにする方法です... ng-repeat-startとng-repeat-endが進むべき道であるかどうかを見せたい人がいる場合。 私は興味がある ;)
アンドリューのソリューション
@Andrewのおかげで、3つ(または任意の数)の要素ごとにブートストラップのclearfixクラスを追加することで、ブロックの高さの違いによる表示の問題が修正されます。
したがって、HTMLは次のようになります。
<div class="row">
<div ng-repeat="product in products">
<div ng-if="$index % 3 == 0" class="clearfix"></div>
<div class="col-sm-4"> My product descrition with {{product.property}}
そして、あなたのコントローラーは削除されたchunck関数で非常にソフトなままです:
// Initialize products to empty list
$scope.products = [];
// Load products from config file
$resource("/json/shoppinglist.json").query({method:'GET', isArray:true}, function (data_array)
{
//$scope.products = data_array.chunk(3);
$scope.products = data_array;
});