Skip to content

Commit 04a4d8b

Browse files
IgorMinarmhevery
authored andcommitted
adding ng:submit directive for use with forms
- allows for binding angular expressions to onsubmit events - prevent default submit action (page reload)
1 parent bbd87c9 commit 04a4d8b

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

src/directives.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,25 @@ angularDirective("ng:click", function(expression, element){
218218
};
219219
});
220220

221+
222+
/**
223+
* Enables binding angular expressions to onsubmit events.
224+
*
225+
* Additionally it prevents the default action (which for form means sending the request to the
226+
* server and reloading the current page).
227+
*/
228+
angularDirective("ng:submit", function(expression, element) {
229+
return function(element) {
230+
var self = this;
231+
element.bind('submit', function(event) {
232+
self.$tryEval(expression, element);
233+
self.$root.$eval();
234+
event.preventDefault();
235+
});
236+
};
237+
});
238+
239+
221240
angularDirective("ng:watch", function(expression, element){
222241
return function(element){
223242
var self = this;

test/directivesSpec.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,20 @@ describe("directives", function(){
195195
});
196196
});
197197

198+
199+
describe('ng:submit', function() {
200+
it('should get called on form submit', function() {
201+
var scope = compile('<form action="" ng:submit="submitted = true">' +
202+
'<input id="submit" type="submit"/>' +
203+
'</form>');
204+
scope.$eval();
205+
expect(scope.submitted).not.toBeDefined();
206+
207+
browserTrigger(element.children()[0]);
208+
expect(scope.submitted).toEqual(true);
209+
});
210+
});
211+
198212
it('should ng:class', function(){
199213
var scope = compile('<div class="existing" ng:class="[\'A\', \'B\']"></div>');
200214
scope.$eval();

0 commit comments

Comments
 (0)