aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMisko Hevery2012-02-06 21:56:35 -0800
committerMisko Hevery2012-02-21 22:46:00 -0800
commit1752c8c44a7058e974ef208e583683eac8817789 (patch)
treea8d49ecfd96e739f2de12a9b71385b46ad3c0cf7
parent6216dc046510204bafd159dba17ce0cc22db6c08 (diff)
downloadangular.js-1752c8c44a7058e974ef208e583683eac8817789.tar.bz2
feat(directive): event now accessible as $event
Closes 259
-rw-r--r--src/directives.js34
-rw-r--r--test/BinderSpec.js24
-rw-r--r--test/directivesSpec.js11
3 files changed, 22 insertions, 47 deletions
diff --git a/src/directives.js b/src/directives.js
index 47a6ef56..c6cc0b15 100644
--- a/src/directives.js
+++ b/src/directives.js
@@ -375,7 +375,7 @@ var ngBindAttrDirective = ['$interpolate', function($interpolate) {
*
* @element ANY
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
- * click.
+ * click. (Event object is available as `$event`)
*
* @example
<doc:example>
@@ -399,20 +399,22 @@ var ngBindAttrDirective = ['$interpolate', function($interpolate) {
* expressions and are compiled and executed within the current scope.
*
* Events that are handled via these handler are always configured not to propagate further.
- *
- * TODO: maybe we should consider allowing users to control event propagation in the future.
*/
var ngEventDirectives = {};
forEach(
'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave'.split(' '),
function(name) {
var directiveName = directiveNormalize('ng-' + name);
- ngEventDirectives[directiveName] = valueFn(function(scope, element, attr) {
- element.bind(lowercase(name), function(event) {
- scope.$apply(attr[directiveName]);
- event.stopPropagation();
- });
- });
+ ngEventDirectives[directiveName] = ['$parse', function($parse) {
+ return function(scope, element, attr) {
+ var fn = $parse(attr[directiveName]);
+ element.bind(lowercase(name), function(event) {
+ scope.$apply(function() {
+ fn(scope, {$event:event});
+ });
+ });
+ };
+ }];
}
);
@@ -425,7 +427,7 @@ forEach(
*
* @element ANY
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
- * dblclick.
+ * dblclick. (Event object is available as `$event`)
*
* @example
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -441,7 +443,7 @@ forEach(
*
* @element ANY
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
- * mousedown.
+ * mousedown. (Event object is available as `$event`)
*
* @example
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -457,7 +459,7 @@ forEach(
*
* @element ANY
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
- * mouseup.
+ * mouseup. (Event object is available as `$event`)
*
* @example
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -472,7 +474,7 @@ forEach(
*
* @element ANY
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
- * mouseover.
+ * mouseover. (Event object is available as `$event`)
*
* @example
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -488,7 +490,7 @@ forEach(
*
* @element ANY
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
- * mouseenter.
+ * mouseenter. (Event object is available as `$event`)
*
* @example
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -504,7 +506,7 @@ forEach(
*
* @element ANY
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
- * mouseleave.
+ * mouseleave. (Event object is available as `$event`)
*
* @example
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
@@ -520,7 +522,7 @@ forEach(
*
* @element ANY
* @param {expression} expression {@link guide/dev_guide.expressions Expression} to evaluate upon
- * mousemove.
+ * mousemove. (Event object is available as `$event`)
*
* @example
* See {@link angular.module.ng.$compileProvider.directive.ng:click ng:click}
diff --git a/test/BinderSpec.js b/test/BinderSpec.js
index b869c616..f7a1c1b3 100644
--- a/test/BinderSpec.js
+++ b/test/BinderSpec.js
@@ -438,30 +438,6 @@ describe('Binder', function() {
assertChild(5, false);
}));
- it('ItShouldDisplayErrorWhenActionIsSyntacticlyIncorrect', function() {
- module(function($exceptionHandlerProvider){
- $exceptionHandlerProvider.mode('log');
- });
- inject(function($rootScope, $exceptionHandler, $log, $compile) {
- element = $compile(
- '<div>' +
- '<input type="button" ng:click="greeting=\'ABC\'"/>' +
- '<input type="button" ng:click=":garbage:"/>' +
- '</div>')($rootScope);
- var first = jqLite(element.find('input')[0]);
- var second = jqLite(element.find('input')[1]);
- var errorLogs = $log.error.logs;
-
- browserTrigger(first, 'click');
- expect($rootScope.greeting).toBe('ABC');
- expect(errorLogs).toEqual([]);
-
- browserTrigger(second, 'click');
- expect($exceptionHandler.errors[0]).
- toMatchError(/Syntax Error: Token ':' not a primary expression/);
- });
- });
-
it('ItShouldSelectTheCorrectRadioBox', inject(function($rootScope, $compile) {
element = $compile(
'<div>' +
diff --git a/test/directivesSpec.js b/test/directivesSpec.js
index 9dee4860..45f1cffc 100644
--- a/test/directivesSpec.js
+++ b/test/directivesSpec.js
@@ -137,15 +137,12 @@ describe("directive", function() {
expect($rootScope.clicked).toEqual(true);
}));
- it('should stop event propagation', inject(function($rootScope, $compile) {
- element = $compile('<div ng:click="outer = true"><div ng:click="inner = true"></div></div>')($rootScope);
+ it('should pass event object', inject(function($rootScope, $compile) {
+ element = $compile('<div ng:click="event = $event"></div>')($rootScope);
$rootScope.$digest();
- expect($rootScope.outer).not.toBeDefined();
- expect($rootScope.inner).not.toBeDefined();
- browserTrigger(element.find('div'), 'click');
- expect($rootScope.outer).not.toBeDefined();
- expect($rootScope.inner).toEqual(true);
+ browserTrigger(element, 'click');
+ expect($rootScope.event).toBeDefined();
}));
});