2017-10-25 35 views
0

私たちがangularJs $ compileをデータテーブルcreatedRow()で使用した場合に気付いたことがあります reload reloadDataがnumburの分離ウォッチャーと無人DOM stuff

使用のページネーションはpaginationsでこのbecouseがcreatedRowを実行したDataTable成長している場合でも()

それは行が前createdRowsに入力して、このビッグメモリリークを避けるコンパイル前の$を破壊することは可能ですか?

私たちは、データリンク可能な行をいくつかのやりとりでng-clickとしてレンダリングするので、angularJs $ compileを使用します。これは、コントローラの$ scope内の関数とのやりとりを必要とします。

申し訳ありませんが、私の英語

してくださいあなたは、代替のアイデアを知っているか解決策は、私に知らせます。

ご協力いただきありがとうございます。

詳細についてはEDITED: 助けを借りてありがとうscipper。

私は、問題についての時間の多くをこのテストを追加し、まだそのメモリリーク解放することはできません。この例で多くの時間再レンダリングした場合

http://l-lin.github.io/angular-datatables/archives/#!/rerender 

は、この例で始まりますそして何のメモリは

**をリークしていない。しかし、私のバージョンでは、私はこのようにreloadDataを使用します**

$scope.dtOptionsMyTable = DTOptionsBuilder.newOptions() 
.withOption('ajax', function(){........}) 
.withOption('createdRow', function (row, data, dataIndex) { 
$compile(angular.element(row).contents())($scope); 
}) 

そして、なぜ私たちはリークメモリの使用を増やしているのか分かりません。ごみコーラはすべてを取り除かない。

メモリ内のこれらの要素をすべて削除するにはどうすればよいですか?

私はすべてのリロードでこれを試してみてください。

instanceTable.DataTable.clear();

はさえ、私たちは、私はすべてでこれを試すこの

$compile(angular.element(row).contents())($scope); 

の別の子オブジェクトinteadでコンパイルしようとリロード

VAR newCreatedChildScope = $スコープ$新しい(偽)。 $ compile(angle.element(row).contents())(newCreatedChildScope);

、その後、すべての中でこのようまだ

newCreatedChildScope.$destroy(); 
newCreatedChildScope=null; 

メモリリークの多くchildscopeを破壊リロード。

instance.DataTable参照を使用する方法は、データをリロードする前にテーブルをもっと破壊する方法ですか?私はこれが

おかげ

+0

私のアプリにも同じ問題があるようです。どのようにメモリリークを検出しますか? – duckegg

答えて

0

解決策になると思う私は、あなたがメモリリークについて記述している何の問題、非常に分かりませんが、私はあなたの質問への答えは、それは破壊前の$ことも可能だと思うことはがある行をコンパイル、 はい。その瞬間、彼らはDOMから取り除かれ、彼らは破壊されます。

メモリリークがまだ発生している場合は、私たちと詳細を共有してみてください。

+0

私はメモリリークをきれいにしようとしているコードについて、より多くの情報を追加して質問を編集します。どうぞ、ROWSをどのように破壊し、どのようにあなたがそれを行うのかの例を書くことができますか? – Falinsito

関連する問題