Я зробив сервіс для ярликів.
Це виглядає як:
angular.module('myApp.services.shortcuts', [])
.factory('Shortcuts', function($rootScope) {
var service = {};
service.trigger = function(keycode, items, element) {
}
return service;
})
І я ввів його в контролер:
angular.module('myApp.controllers.mainCtrl', [])
.controller('mainCtrl', function($scope, $element, $document, Shortcuts) {
$document.on('keydown', function(){
if(event.target.tagName !== "INPUT") {
Shortcuts.trigger(event.which, $scope.items, $element);
}
})
})
Це працює, але ви можете помітити, що я ввожу $ елемент і $ документ в контролер.
Це погана практика контролера і порушує конвенцію `` Ніколи не отримувати доступ до елемента $ у контролері ''
Я повинен вкласти це в директиву, а потім використовувати 'ngKeydown' і $ event для запуску служби.
Але я думаю, що послуга чудова, і я перероблю контролер швидше.
оновлено:
Здається, "ng-keydown" працює лише у вхідних тегах.
Тому я просто пишу директиву і ввожу $ документ:
angular.module('myApp.controllers.mainCtrl', [])
.directive('keyboard', function($scope, $document, Shortcuts) {
return {
link: function(scope, element, attrs) {
scope.items = ....;
$document.on('keydown', function(){
if(event.target.tagName !== "INPUT") {
Shortcuts.trigger(event.which, scope.items, element);
}
})
}
}
})
Краще.