У меня есть глобальный метод наблюдения за нажатиями клавиш во всем приложении. Когда происходит нажатие клавиши, я транслирую событие следующим образом:
var keycodes = {
'escape': 27,
}
angular.element($window).on('keydown', function(e) {
for (var name in keycodes) {
if (e.keyCode === keycodes[name]) {
$rootScope.$broadcast('keydown-' + name, angular.element(e.target))
}
}
})
Это все работает нормально. В моем контроллере, я прослушивайте событие так:
$rootScope.$on('keydown-escape', $scope.hideOverlays)
Это также работает хорошо, однако, когда я пытаюсь обновить атрибуты объекта $ области видимости, я не вижу правильное поведение в DOM:
$scope.hideOverlays = function() {
for (var i=0; i < $scope.gallery.items.length; i++) {
$scope.gallery.items[i].overlayShown = false;
$scope.gallery.items[i].editing = false;
}
}
Когда я вызываю этот метод внутренне с контроллера, все работает нормально, поэтому мне интересно, есть ли что-то, что Угловое делает по-другому в зависимости от способа вызова метода. Я попробовал имя $ scope. $ Apply(). В дополнение к кажущемуся, что это нехорошо, я также получаю сообщение об ошибке, так что там нет кубиков. Любая помощь очень ценится!
Ваш 'keydown' событие в' app.run'? Вы все правильно вводите? [Вот пример скрипта вашего кода] (http://jsfiddle.net/7h61dv1L/1/). В скрипке обязательно зайдите в раздел html, прежде чем нажимать escape, чтобы панель имела фокус. – jnthnjns