2013-06-06 107 views
7

我有一個$scope.$watch在指令的控制器中聲明。當我更換頁面並刪除指令時,是否必須手動銷燬?如果是這樣,我該如何檢測指令何時被刪除?Angularjs指令刪除手錶?

+0

角度應該照顧你 –

回答

20

它取決於範圍,而不是指令。如果範圍被破壞,那麼所有的$觀察者都會死亡。在頁面上,你的範圍將被角度銷燬,所以你應該是安全的。

當一個作用域死亡時,它會產生一個$ destroy事件。你可以看它:

$scope.$on('$destroy', callback); 

,你可以手動拆卸$觀察家從範圍,通過調用返回的功能:

var sentinel = $scope.$watch('expression', callback); 
sentinel(); // kill sentinel 

您可以用得$做到這一點。

+0

首先,你說當範圍被破壞時,所有觀察者都會死亡。然後,你建議手動刪除範圍$ destroy事件的觀察者(爲什麼?他們應該自動死於範圍)。這對我沒有意義。你能否詳細說明一下? – hendrix

+1

當使用ngView角度更改頁面時,將使用觀察者清理最後一個範圍。 (proof => http://goo.gl/GD0pM9) 此外,angular還爲您提供了觀察器銷燬函數,因此如果您不再需要當前範圍,則可以手動刪除該表達式。 – Oliver