2015-12-04 45 views
0

我有一個連接到angularjs控制器指令,像如果DOM元素被「刪除」,AngularJS Controller會被銷燬?

<my-directive id="my-unique-directive" ng-controller="MyController"></my-directive> 

我的控制器內,在某些時候,我需要這個指令消失。然後我混合了一些jQuery到它,所以我可以$('#my-unique-directive').remove();

它工作正常,但我這樣做是否正確?我知道你不應該訪問控制器內部的DOM元素,但我會如何實現這個結果?

爲了測試我的控制器是否被破壞,我設置了一個函數,該函數將每秒鐘調用console.log('I'm still here');,並且在刪除DOM元素後立即調用該函數。 (此外,該功能附加到控制器本身,而不是$範圍)

這證實了我的擔憂:控制器沒有被銷燬,即使在刪除指令後,日誌仍然顯示。

如何在銷燬DOM元素後銷燬控制器?

+2

不確定你對這個控制器有什麼?它真的需要被銷燬嗎?一開始不要使用jQuery,也許使用ng-if =「dontShowMe」 –

+0

是的,ng-if會爲你做這個工作http://plnkr.co/edit/t0MZrSmeAD0BQVKW9RVw?p=preview –

+0

我以爲我需要摧毀我創建的立場,如果我要在其他地方重複使用 –

回答

1

ng-if會爲你做這項工作:

<my-directive id="my-unique-directive" ng-controller="MyController" ng-if="!isDeleted"></my-directive> 

只設置isDeleted爲true,將刪除元素和相關範圍。

提示: 如果將控制器存儲到某個變量中,它不會被銷燬。 (因爲垃圾回收器將無法收集它) 如果您使用$ timeout(console.log('我在這裏'),1000) - 它仍然會被執行。 但這並不意味着控制器存在。

+0

我習慣於銷燬由於Java,Pascal等創建的每個對象的每個實例。我認爲同樣的規則適用於此處。 。在我「ng-if」這個指令後,我會在另一個地方創建相同的東西,那仍然沒有問題吧? –

相關問題