Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 1752c8c

Browse files
committed
feat(directive): event now accessible as $event
Closes 259
1 parent 6216dc0 commit 1752c8c

File tree

3 files changed

+22
-47
lines changed

3 files changed

+22
-47
lines changed

src/directives.js

+18-16
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ var ngBindAttrDirective = ['$interpolate', function($interpolate) {
375375
*
376376
* @element ANY
377377
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
378-
* click.
378+
* click. (Event object is available as `$event`)
379379
*
380380
* @example
381381
<doc:example>
@@ -399,20 +399,22 @@ var ngBindAttrDirective = ['$interpolate', function($interpolate) {
399399
* expressions and are compiled and executed within the current scope.
400400
*
401401
* Events that are handled via these handler are always configured not to propagate further.
402-
*
403-
* TODO: maybe we should consider allowing users to control event propagation in the future.
404402
*/
405403
var ngEventDirectives = {};
406404
forEach(
407405
'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave'.split(' '),
408406
function(name) {
409407
var directiveName = directiveNormalize('ng-' + name);
410-
ngEventDirectives[directiveName] = valueFn(function(scope, element, attr) {
411-
element.bind(lowercase(name), function(event) {
412-
scope.$apply(attr[directiveName]);
413-
event.stopPropagation();
414-
});
415-
});
408+
ngEventDirectives[directiveName] = ['$parse', function($parse) {
409+
return function(scope, element, attr) {
410+
var fn = $parse(attr[directiveName]);
411+
element.bind(lowercase(name), function(event) {
412+
scope.$apply(function() {
413+
fn(scope, {$event:event});
414+
});
415+
});
416+
};
417+
}];
416418
}
417419
);
418420

@@ -425,7 +427,7 @@ forEach(
425427
*
426428
* @element ANY
427429
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
428-
* dblclick.
430+
* dblclick. (Event object is available as `$event`)
429431
*
430432
* @example
431433
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -441,7 +443,7 @@ forEach(
441443
*
442444
* @element ANY
443445
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
444-
* mousedown.
446+
* mousedown. (Event object is available as `$event`)
445447
*
446448
* @example
447449
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -457,7 +459,7 @@ forEach(
457459
*
458460
* @element ANY
459461
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
460-
* mouseup.
462+
* mouseup. (Event object is available as `$event`)
461463
*
462464
* @example
463465
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -472,7 +474,7 @@ forEach(
472474
*
473475
* @element ANY
474476
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
475-
* mouseover.
477+
* mouseover. (Event object is available as `$event`)
476478
*
477479
* @example
478480
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -488,7 +490,7 @@ forEach(
488490
*
489491
* @element ANY
490492
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
491-
* mouseenter.
493+
* mouseenter. (Event object is available as `$event`)
492494
*
493495
* @example
494496
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -504,7 +506,7 @@ forEach(
504506
*
505507
* @element ANY
506508
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
507-
* mouseleave.
509+
* mouseleave. (Event object is available as `$event`)
508510
*
509511
* @example
510512
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -520,7 +522,7 @@ forEach(
520522
*
521523
* @element ANY
522524
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
523-
* mousemove.
525+
* mousemove. (Event object is available as `$event`)
524526
*
525527
* @example
526528
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}

test/BinderSpec.js

-24
Original file line numberDiff line numberDiff line change
@@ -438,30 +438,6 @@ describe('Binder', function() {
438438
assertChild(5, false);
439439
}));
440440

441-
it('ItShouldDisplayErrorWhenActionIsSyntacticlyIncorrect', function() {
442-
module(function($exceptionHandlerProvider){
443-
$exceptionHandlerProvider.mode('log');
444-
});
445-
inject(function($rootScope, $exceptionHandler, $log, $compile) {
446-
element = $compile(
447-
'<div>' +
448-
'<input type="button" ng:click="greeting=\'ABC\'"/>' +
449-
'<input type="button" ng:click=":garbage:"/>' +
450-
'</div>')($rootScope);
451-
var first = jqLite(element.find('input')[0]);
452-
var second = jqLite(element.find('input')[1]);
453-
var errorLogs = $log.error.logs;
454-
455-
browserTrigger(first, 'click');
456-
expect($rootScope.greeting).toBe('ABC');
457-
expect(errorLogs).toEqual([]);
458-
459-
browserTrigger(second, 'click');
460-
expect($exceptionHandler.errors[0]).
461-
toMatchError(/Syntax Error: Token ':' not a primary expression/);
462-
});
463-
});
464-
465441
it('ItShouldSelectTheCorrectRadioBox', inject(function($rootScope, $compile) {
466442
element = $compile(
467443
'<div>' +

test/directivesSpec.js

+4-7
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,12 @@ describe("directive", function() {
137137
expect($rootScope.clicked).toEqual(true);
138138
}));
139139

140-
it('should stop event propagation', inject(function($rootScope, $compile) {
141-
element = $compile('<div ng:click="outer = true"><div ng:click="inner = true"></div></div>')($rootScope);
140+
it('should pass event object', inject(function($rootScope, $compile) {
141+
element = $compile('<div ng:click="event = $event"></div>')($rootScope);
142142
$rootScope.$digest();
143-
expect($rootScope.outer).not.toBeDefined();
144-
expect($rootScope.inner).not.toBeDefined();
145143

146-
browserTrigger(element.find('div'), 'click');
147-
expect($rootScope.outer).not.toBeDefined();
148-
expect($rootScope.inner).toEqual(true);
144+
browserTrigger(element, 'click');
145+
expect($rootScope.event).toBeDefined();
149146
}));
150147
});
151148

0 commit comments

Comments
 (0)