Я столкнулся с аналогичной проблемой и решил, что это будет создание простой директивы, которая перехватывает события keydown/keypress по ссылке, а затем вызывает функцию, связанную с директивой.
Вот директива:
// Allows for the interception of the enter key, and then calling a passed in function
(function() {
'use strict';
angular
.module('app.directives')
.directive('convEnter', convEnter);
function convEnter() {
var directive = {
restrict: 'A',
link: link
};
return directive;
////////////////////////////////////////////////////////////////////////
function link(scope, element, attrs) {
element.bind('keydown keypress', function (event) {
if (event.which === 13) {
scope.$apply(function() {
scope.$eval(attrs.convEnter, { 'event': event });
});
event.preventDefault();
}
});
}
}
})();
Чтобы использовать его, вы бы просто применить его к вашей ссылке, то есть:
<a conv-enter="vm.click()" ng-click="vm.click()">Click Link</a>
Конечно, это немного повторяющееся, как вы определяете " vm.click() "дважды; вы можете оптимизировать это, если хотите, указав, что директива просто вызывает функцию «щелчок» на самом элементе, если вы всегда хотели, чтобы щелчок и клавиша ввода вызывали ту же функцию. (В моем сценарии мне иногда нужно было различать два, и, следовательно, я разрешал передавать в отдельной функции)