2017-08-07 9 views
0

私は、ディレクティブを使用してツリーのようなデータをレンダリングしています。 データをフィルタリングすることができます。 フィルタをクリアすると、私は私の指示がデータの新しい変化に対応し、それ自体を更新すると期待しますが、そうではありません。 ビュー/ルートを変更した場合にのみ、ディレクティブが更新されます。ディレクティブを角度でコンパイルするには?

私は

$scope.$on('clearingStockFilter', function() { 
       $timeout(function() { 
        $compile($element.contents())($scope); 
       },300); 
      }); 

フィルタイベントをクリアするには、このコードを実行しようとしたしかし、私はクローン化されたディレクティブを作るで終わるので、私はあなたが戻って要素を交換する必要があり

+0

ディレクティブが正しく設計されている場合は、データが変更されたときにディレクティブを再コンパイルする必要はありません。また、$ compileサービスは、実行するたびにスコープにウォッチャーを追加します。これによりメモリリークやウォッチャーの重複が発生します。より良いアプローチを推奨できるように、ディレクティブ全体のコードを示してください。 – georgeawg

+0

georgeawgデータが変更された場合、指令を再遵守する必要はないはずです。私は大量のデータを扱っているので、「角形結合」を使っていました。そのため、私は特定のイベントでディレクティブを再コンパイルしようとしていました。 https://stackoverflow.com/users/5535245/georgeawg – SMH

+0

コードでルータを使用している場合、ビューを再読み込みすると[ワンタイムバインディング]がリセットされます(https://docs.angularjs.org/guide/expression #1回限りのバインディング)。同等の機能を持つ指令を書く場合、その指令はその問題に対処する必要があります。 – georgeawg

答えて

0

ビューで2倍のデータを参照してくださいを開始コンパイルされたものと;

var newEl = $compile($element.contents())($scope); 
$element.replaceWith(newEl); 

Btwは、実行しようとしていることを達成するための最良の方法ではない可能性があります。

関連する問題