В моем приложении я использую пользовательскую директиву с прослушивателя событий Изменить размер окна:Приемники событий выстрелил несколько раз из той же директиве
link: function(scope, elem, attrs) {
angular.element($window).bind('resize', function() {
// viewId is a unique reference to the view in which the directive lives
console.log(scope.viewId);
});
}
Эта директива установлена 1 или несколько раз в каждом из моих взглядов.
Что вызывает у меня головоломка, почему функция выполняется не только для активного вида, но и для неактивных. Это происходит, когда я получаю доступ к нескольким представлениям.
Что еще больше заставляет меня задуматься, почему функция вызывается несколько раз из того же представления, после того как я посетил один и тот же взгляд несколько раз.
Мне кажется, что старая область действия не уничтожена, но сохраняется в живых и создается новая область поверх старой.
Есть ли что-нибудь, что я могу сделать, чтобы этого не случилось?
Ниже фрагмент кода рабочего раствора на основе ответа, Ренан Lopes Ferreira (я использую LoDash _.debounce предотвратить функцию называют слишком часто):
windowResize = _.debounce(function() {
// My logic
$scope.$apply();
}, 150);
// Attach debounced function to the window.resize event listener
angular.element($window).on('resize', windowResize);
// Remove the function when the directive is destroyed
$scope.$on('$destroy', function() {
angular.element($window).off('resize', windowResize);
});
Это работает как шарм, большое спасибо за это! – Hendrik