Нужно ли мне перехватывать переменные области видимости при уничтожении области?

Ниже приведены документы из angular. Я просматриваю несколько переменных, которые являются частью этой области, чтобы создать строку фильтра для ng-grid. Когда эта область уничтожается, мне НЕОБХОДИМО удалить их, вызвав возвращаемое значение из $scope. $Watch, или это разрушение области, достаточной для того, чтобы справиться с этим? Что делать, если наблюдаемые переменные НЕ были частью этой области?

Я буду утечка памяти из-за проблем с производительностью, если я не "вытаскиваю" переменные, которые уничтожаются вместе с областью.


$уничтожить()

Удаляет текущую область (и все ее дочерние элементы) из родительской области. Удаление означает, что вызовы $digest() больше не будут распространяться на текущую область и ее дочерние элементы. Удаление также подразумевает, что текущий объем имеет право на сбор мусора.

$destroy() обычно используется директивами, такими как ngRepeat для управления разворачиванием цикла.

Перед тем, как область будет уничтожена, в этой области транслируется событие $destroy. Код приложения может регистрировать обработчик события $destroy, который даст ему возможность выполнить любую необходимую очистку.

Обратите внимание, что в AngularJS также существует событие $destroy jQuery, которое может использоваться для очистки привязок DOM до удаления элемента из DOM.

Ответ 1

Быстрый просмотр исходного кода покажет вам, что функция удаления, возвращаемая $watch, не делает ничего экзотичного. Он просто удаляет элемент из области действия. $$ watchers array.

Таким образом, как только область будет уничтожена, весь массив идет вместе с ней, и сборщик мусора очистит все для вас.

Независимо от того, что вы смотрите, сами часы хранятся в области. Поэтому, чтобы использовать $watch, вы не вызываете angular. $Watch, а скорее вы вызываете $scope. $Watch.

Ответ 2

Я также считаю, что это должно быть явно объяснено в документации. Я пришел к выводу, что ненужное из исходного кода angular, которое всегда игнорирует результат scope.$watch (в ngIf, ngShow, ngRepeat и т.д.), Необязательно.