Как поставить listen over $destroy при использовании синтаксиса controllerAs в угловых
Теперь я избавляюсь от $scope
зависимость от моего углового контроллера для обеспечения того, чтобы я мог легко перенести мой код в Angular2. Моя текущая угловая версия 1.4.X
, Делая то же самое, есть место, пока я $destroy
слушатель над моим контроллером объема, как $scope.$on('$destory', function() ....)
,
я могу видеть $on
метод доступен только на $scope
контроллера, но как я могу добиться этого без использования $scope
зависимость.
2 ответа
Если вы используете Angular 1.5+, они добавили хуки жизненного цикла, которые вы можете использовать на своем контроллере. нет $scope
необходимо. Просто добавьте функцию под названием $onDestroy()
на ваш контроллер, и он будет вызван, когда ваш контроллер очищается:
$onDestroy()
- Вызывается на контроллере, когда его содержащая область уничтожена. Используйте этот хук для освобождения внешних ресурсов, часов и обработчиков событий.
Пример из http://blog.thoughtram.io/angularjs/2016/03/29/exploring-angular-1.5-lifecycle-hooks.html:
function MyCmpController($element) {
var clickHandler = function () {
// do something
};
this.$onInit = function () {
$element.on('click', clickHandler);
};
this.$onDestroy = function () {
$element.off('click', clickHandler);
};
}
После некоторых исследований я обнаружил, что $destroy
Событие генерируется при удалении DOM и в той же области DOM, которое оно передает $destroy
событие, но в то же время это событие было распространено на DOM
который будет удален.
Вы знаете, что есть одна зависимость $element
, если вы введете, что в контроллере даст вам DOM, где у вас есть ng-controller
директивное место. Так впрыскивать $element
внутри вашего контроллера и затем поместите слушателя над ним, как показано ниже
$element.on('$destroy', function(){
//write clean up code here
});
Мой раствор будет работать до версии 1.4.X. Для версии 1.5.3+ вы можете использовать Angular
lifecycle hook
который$onDestroy
как показано@pgreen2
в ответе выше. Спасибо:)