aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Cross2013-12-04 14:33:58 -0800
committerTobias Bosch2013-12-04 15:29:19 -0800
commitd802ed1b3680cfc1751777fac465b92ee29944dc (patch)
tree923f6bb914c25c39ff5758a9dd83eb6bfa68d1e0
parente8f4305e9d1587512dbef44733fd162caa1cef59 (diff)
downloadangular.js-d802ed1b3680cfc1751777fac465b92ee29944dc.tar.bz2
fix($rootScope): broadcast $destroy event on $rootScope
Fixes #5169
-rw-r--r--src/ng/rootScope.js3
-rw-r--r--test/ng/rootScopeSpec.js6
2 files changed, 7 insertions, 2 deletions
diff --git a/src/ng/rootScope.js b/src/ng/rootScope.js
index 13ee4c70..a54fdc98 100644
--- a/src/ng/rootScope.js
+++ b/src/ng/rootScope.js
@@ -670,11 +670,12 @@ function $RootScopeProvider(){
*/
$destroy: function() {
// we can't destroy the root scope or a scope that has been already destroyed
- if ($rootScope == this || this.$$destroyed) return;
+ if (this.$$destroyed) return;
var parent = this.$parent;
this.$broadcast('$destroy');
this.$$destroyed = true;
+ if (this === $rootScope) return;
if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
diff --git a/test/ng/rootScopeSpec.js b/test/ng/rootScopeSpec.js
index 69447a3c..287b5356 100644
--- a/test/ng/rootScopeSpec.js
+++ b/test/ng/rootScopeSpec.js
@@ -599,10 +599,14 @@ describe('Scope', function() {
}));
- it('should ignore remove on root', inject(function($rootScope) {
+ it('should broadcast $destroy on rootScope', inject(function($rootScope) {
+ var spy = spyOn(angular, 'noop');
+ $rootScope.$on('$destroy', angular.noop);
$rootScope.$destroy();
$rootScope.$digest();
expect(log).toEqual('123');
+ expect(spy).toHaveBeenCalled();
+ expect($rootScope.$$destroyed).toBe(true);
}));