diff options
| -rw-r--r-- | src/directives.js | 19 | ||||
| -rw-r--r-- | test/directivesSpec.js | 14 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/directives.js b/src/directives.js index 148e1f86..49f0343d 100644 --- a/src/directives.js +++ b/src/directives.js @@ -218,6 +218,25 @@ angularDirective("ng:click", function(expression, element){ }; }); + +/** + * Enables binding angular expressions to onsubmit events. + * + * Additionally it prevents the default action (which for form means sending the request to the + * server and reloading the current page). + */ +angularDirective("ng:submit", function(expression, element) { + return function(element) { + var self = this; + element.bind('submit', function(event) { + self.$tryEval(expression, element); + self.$root.$eval(); + event.preventDefault(); + }); + }; +}); + + angularDirective("ng:watch", function(expression, element){ return function(element){ var self = this; diff --git a/test/directivesSpec.js b/test/directivesSpec.js index 341e9031..0e99a63f 100644 --- a/test/directivesSpec.js +++ b/test/directivesSpec.js @@ -195,6 +195,20 @@ describe("directives", function(){ }); }); + + describe('ng:submit', function() { + it('should get called on form submit', function() { + var scope = compile('<form action="" ng:submit="submitted = true">' + + '<input id="submit" type="submit"/>' + + '</form>'); + scope.$eval(); + expect(scope.submitted).not.toBeDefined(); + + browserTrigger(element.children()[0]); + expect(scope.submitted).toEqual(true); + }); + }); + it('should ng:class', function(){ var scope = compile('<div class="existing" ng:class="[\'A\', \'B\']"></div>'); scope.$eval(); |
