2016-08-15 3 views
0

巨大オブジェクトを繰り返し再生し、クロムとオペラで高速に動作しています。しかし、MozillaやIEのようなブラウザでは、非常に遅いです。私は改ページを使用してみましたが、それは助けられましたが、それらのページを改ページするのではなく、ロード時にすべてのアイテムを表示したいと思います。ですから、オブジェクトの最後の項目を実行した後でng-repeatがそのオブジェクトを聴いてしまうのを止めることができれば、このアイデアを思いつきました。AngularJS - オブジェクト上の最後のアイテムに到達したときにng-repeatを停止する方法

ただし、レンダリングされたhtml要素は削除しないでください。

オブジェクトが変更された場合、ng-repeatをもう一度やり直して最後の項目で停止します。

ng-repeatについて知っているので、オブジェクトを無限にループし続けるので、オブジェクトが大きすぎるとIEとMozillaが読み込みが遅くなる可能性があります。

ng-repeatを停止することは可能ですか?

答えて

0

コレクションがまったく変更されていない場合、ngRepeatはDOMを変更しないでください。問題があなたの考えであると確信するために、慎重にプロファイルする必要があります。ドキュメント(https://docs.angularjs.org/api/ng/directive/ngRepeat)で

ngRepeatは、コレクションの変化を検出するために$ watchCollectionを使用しています。変更が発生すると、ngRepeatはDOMに対応する変更を行います。

アイテムが追加されると、テンプレートの新しいインスタンスがDOMに追加されます。

アイテムが削除されると、テンプレートインスタンスがDOMから削除されます。

アイテムの順序が変更されると、それぞれのテンプレートがDOMで並べ替えられます。

これを防ぐことはできない、と$watchCollection(私は信じて)何が並べ替えされているかどうかを確認するためにあなたのコレクションを反復処理する必要があります。

まだngRepeatを使用しているときに時計を「切る」ようには見えません。

変更を検出するメカニズムとして$watchCollectionを使用しない場合は、独自のダーティチェック/トリガーを作成し、DOMを自分で生成する必要があります。

+0

私は参照してください。さて、これが当てはまる場合は、ブラウザがmozillaまたはIEの場合は常にデフォルトでページネーションを実行し、クロムまたはオペラの場合はページネーションを削除します。ありがとう! –

+0

@VoltaireJohnSecondesBitonあなたは実際にmozillaとIEの減速を引き起こす原因をプロファイルしましたか?あなたのコレクションが絶えず変化しない限り、あなたのコレクションを通る実際の反復(何千ものアイテムが何千もある場合を除き)はあまりにも大きなヒットを引き起こしません。 – Daniel

+0

絶えず変化しません。オブジェクトは大きすぎるため、mozillaとIEは処理できません。通常は読み込み中にハングし、オブジェクト全体を読み込むには約2〜3分かかります。しかし、それはすべてをロードした後、多くのハングアップします。リストを改ページすると速くなりました。 –

関連する問題