diff --git a/src/ngAria/aria.js b/src/ngAria/aria.js index 0d39941fe858..787533c13a68 100644 --- a/src/ngAria/aria.js +++ b/src/ngAria/aria.js @@ -297,21 +297,28 @@ ngAriaModule.directive('ngShow', ['$aria', function($aria) { } }; }) -.directive('ngClick',['$aria', function($aria) { +.directive('ngClick',['$aria', '$parse', function($aria, $parse) { return { restrict: 'A', - link: function(scope, elem, attr) { - if ($aria.config('tabindex') && !elem.attr('tabindex')) { - elem.attr('tabindex', 0); - } + compile: function(elem, attr) { + var fn = $parse(attr.ngClick, /* interceptorFn */ null, /* expensiveChecks */ true); + return function(scope, elem, attr) { + if ($aria.config('tabindex') && !elem.attr('tabindex')) { + elem.attr('tabindex', 0); + } - if ($aria.config('bindKeypress') && !elem.attr('ng-keypress')) { - elem.on('keypress', function(event) { - if (event.keyCode === 32 || event.keyCode === 13) { - scope.$eval(attr.ngClick); - } - }); - } + if ($aria.config('bindKeypress') && !attr.ngKeypress) { + elem.on('keypress', function(event) { + if (event.keyCode === 32 || event.keyCode === 13) { + scope.$apply(callback); + } + + function callback() { + fn(scope, { $event: event }); + } + }); + } + }; } }; }]) diff --git a/test/ngAria/ariaSpec.js b/test/ngAria/ariaSpec.js index 1ae8cb49317b..4d14525cade3 100644 --- a/test/ngAria/ariaSpec.js +++ b/test/ngAria/ariaSpec.js @@ -509,6 +509,23 @@ describe('$aria', function() { expect(clickFn).not.toHaveBeenCalled(); expect(keypressFn).toHaveBeenCalled(); }); + + it('should update bindings when keypress handled', function() { + compileInput('