diff --git a/src/ng/directive/ngEventDirs.js b/src/ng/directive/ngEventDirs.js
index c93f64a2..c93f52d3 100644
--- a/src/ng/directive/ngEventDirs.js
+++ b/src/ng/directive/ngEventDirs.js
@@ -49,7 +49,7 @@ forEach(
'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
function(name) {
var directiveName = directiveNormalize('ng-' + name);
- ngEventDirectives[directiveName] = ['$parse', function($parse) {
+ ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
return {
compile: function($element, attr) {
var fn = $parse(attr[directiveName]);
@@ -59,7 +59,7 @@ forEach(
var callback = function() {
fn(scope, {$event:event});
};
- if (forceAsyncEvents[eventName] && scope.$$phase) {
+ if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
scope.$evalAsync(callback);
} else {
scope.$apply(callback);
diff --git a/test/ng/directive/ngEventDirsSpec.js b/test/ng/directive/ngEventDirsSpec.js
index 1e1d5c92..71e89343 100644
--- a/test/ng/directive/ngEventDirsSpec.js
+++ b/test/ng/directive/ngEventDirsSpec.js
@@ -42,18 +42,30 @@ describe('event directives', function() {
describe('focus', function() {
- it('should call the listener asynchronously during $apply',
- inject(function($rootScope, $compile) {
- element = $compile('')($rootScope);
- $rootScope.focus = jasmine.createSpy('focus');
+ describe('call the listener asynchronously during $apply', function() {
+ function run(scope) {
+ inject(function($compile) {
+ element = $compile('')(scope);
+ scope.focus = jasmine.createSpy('focus');
- $rootScope.$apply(function() {
- element.triggerHandler('focus');
- expect($rootScope.focus).not.toHaveBeenCalled();
- });
+ scope.$apply(function() {
+ element.triggerHandler('focus');
+ expect(scope.focus).not.toHaveBeenCalled();
+ });
- expect($rootScope.focus).toHaveBeenCalledOnce();
- }));
+ expect(scope.focus).toHaveBeenCalledOnce();
+ });
+ }
+
+ it('should call the listener with non isolate scopes', inject(function($rootScope) {
+ run($rootScope.$new());
+ }));
+
+ it('should call the listener with isolate scopes', inject(function($rootScope) {
+ run($rootScope.$new(true));
+ }));
+
+ });
it('should call the listener synchronously inside of $apply if outside of $apply',
inject(function($rootScope, $compile) {
@@ -72,18 +84,30 @@ describe('event directives', function() {
describe('blur', function() {
- it('should call the listener asynchronously during $apply',
- inject(function($rootScope, $compile) {
- element = $compile('')($rootScope);
- $rootScope.blur = jasmine.createSpy('blur');
+ describe('call the listener asynchronously during $apply', function() {
+ function run(scope) {
+ inject(function($compile) {
+ element = $compile('')(scope);
+ scope.blur = jasmine.createSpy('blur');
- $rootScope.$apply(function() {
- element.triggerHandler('blur');
- expect($rootScope.blur).not.toHaveBeenCalled();
- });
+ scope.$apply(function() {
+ element.triggerHandler('blur');
+ expect(scope.blur).not.toHaveBeenCalled();
+ });
- expect($rootScope.blur).toHaveBeenCalledOnce();
- }));
+ expect(scope.blur).toHaveBeenCalledOnce();
+ });
+ }
+
+ it('should call the listener with non isolate scopes', inject(function($rootScope) {
+ run($rootScope.$new());
+ }));
+
+ it('should call the listener with isolate scopes', inject(function($rootScope) {
+ run($rootScope.$new(true));
+ }));
+
+ });
it('should call the listener synchronously inside of $apply if outside of $apply',
inject(function($rootScope, $compile) {