膨大な量のデータがあることを考えると、本当に完璧なソリューションがあるかどうかはわかりません。一度にすべての親とすべての子を表示する必要がありますか? または、一度に 100 個のノードしか表示しないように、結果をページ付けできますか? あなたの例では、親と両方の子が同じ id プロパティ値 0 を持っています。それは実際に当てはまりますか? または、あなたの両親と子供は一意のIDを持っていますか? バックエンド Web サービスにアクセスできますか? 提供するjsonの形式を変更できますか?
上記の質問にいくつかの仮定を置いて、私が考えることができる最良の提案は次のとおりです。
JSON を次のような形式に変更します。
var bigobject = {
100: {
"id":100,
"name":"Parent One",
"listOfChildren":{
101: {
"id":101,
"name":"Child 1",
"childType":"CHILD1"
},
102: {
"id":102,
"name":"Child 2",
"childType":"CHILD1"
}
... // more children here
}
},
103: {
"id":103,
"name":"Parent Two",
"listOfChildren":{
104: {
"id":104,
"name":"Child 3",
"childType":"CHILD1"
},
105: {
"id":105,
"name":"Child 4",
"childType":"CHILD1"
}
... // more children here
}
},
... // more parents here
}
基本的に、すべてのノードのキーがそのノードの .xml である 1 つの大きな json オブジェクトがありますid
。次に、親listOfChildren
を配列から、その子のすべての ID のキーを持つオブジェクトに変更します。
親に新しい子を追加するのは簡単です。例えば:
var parentId = 103;
var newChild = {"id":110,"name":"Child 2","childType":"CHILD1"};
bigobject[parentId].listOfChildren[newChild.id] = newChild;
結果をページ分割するには、組み込みlimitTo
フィルターとカスタム フィルターを使用できstartFrom
ます。
.filter('startFrom', function() {
return function(input, start) {
if(!input) return input;
start = +start;
return input.slice(start);
};
});
そして、あなたng-repeat
は次のようになります:
<div ng-repeat="(parentId, parent) in bigobject | startFrom:start | limitTo:pageSize">
<div ng-repeat="(childId, child) in bigobject[parentId].listOfChildren">
{{parent.name}} - {{child.name}}
</div>
</div>
それが役立つか、少なくとも役立つ方向にあなたを向けることを願っています.