2016-09-13 14 views
0

私は1000のルート項目を持っています。これらの各アイテムには4つの子アイテムがあります。これらのアイテムには〜100個の要素からなる2つのコレクションがあり、編集することができます。 これらの要素は遅延ロードされていますが、最悪の場合、1000 * 4 * 2 * 100 = 800k要素が編集可能です。アングルダイジェストループと非常に大きなモデル

エディションがある場合は有効にします。 私は要素が編集されているかどうか、および親に編集された要素があるかどうかを判断するために各レベルに関数を書きました。 また、ルートコンテナには、ボタンを有効/無効にするisEdited関数があります。

しかし、この関数を各ダイジェストループで呼び出すのは最適ではないようです。なぜなら、エディションは頻繁には起こらないからです。

この問題の解決策はありますか? 私はknockout.jsのようなものを意味しています。ここでは、parentプロパティは子プロパティを監視し、編集が行われるときにのみその値を変更できます。 私のケースでは、isEditionは各ダイジェストループで計算されません。しかし、編集が行われると更新されます。

私は自分のコードをプロファイルし、isEdited()関数が最も多くのCPU時間を要することを発見しました。

答えて

0

あなたは

$scope.$watch('bigObjectWithNesting', 
    function(newV, oldV) { $scope.isEditedFlag = ...; }, 
    true); 

したり、メソッドの呼び出しを試してみました。そして、HTMLにisEditedFlagを使用してください。

0

watchの場合、常に各ダイジェストで計算されます。各ルート要素にng-changeを使用し、isEditingフラグをtrueに設定することができます。あなたはもっと何かを必要とするかもしれませんが、これは私が考える一つのアプローチかもしれません。

関連する問題