2017-08-07 68 views
0

我正在使用指令來呈現樹狀數據。 由於數據可以被過濾。 當我清除過濾器;我希望我的指示能夠對數據中的新變化作出響應並進行更新,但事實並非如此。 只有當我更改視圖/路線指令得到更新。如何在Angular中重新編譯指令?

我試圖在清除過濾器事件

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

執行這個代碼,但我最終與製作克隆的指令,所以我開始看到數據在兩次查看

+0

如果指令設計正確,則在數據更改時不需要重新編譯指令。此外,$ compile服務會在每次執行時添加觀察者的範圍。這將導致內存泄漏和觀察者重複。請顯示整個指令的代碼,以便我們可以推薦更好的方法。 – georgeawg

+0

georgeawg我同意如果數據發生變化,指令不需要重新編寫;但我正在使用「angular-bindonce」,因爲我正在處理大量數據;因此我試圖重新編譯關於特定事件的指令。 https://stackoverflow.com/users/5535245/georgeawg – SMH

+0

如果代碼使用路由器,重新加載視圖將重置[一次性綁定](https://docs.angularjs.org/guide/expression #一次性綁定)沒有內存泄漏。如果您編寫的指令具有相同的功能,那麼該指令需要解決該問題。 – georgeawg

回答

0

此時應更換元反與編譯的一個;

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

順便說一句,這可能不是實現你正在嘗試做的最好的方法。