diff options
Diffstat (limited to 'src/ng/rootScope.js')
| -rw-r--r-- | src/ng/rootScope.js | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/src/ng/rootScope.js b/src/ng/rootScope.js index bb12362b..81c9ee78 100644 --- a/src/ng/rootScope.js +++ b/src/ng/rootScope.js @@ -372,7 +372,7 @@ function $RootScopeProvider(){ watchLog = [], logIdx, logMsg; - flagPhase(target, '$digest'); + beginPhase('$digest'); do { dirty = false; @@ -429,12 +429,13 @@ function $RootScopeProvider(){ } while ((current = next)); if(dirty && !(ttl--)) { + clearPhase(); throw Error(TTL + ' $digest() iterations reached. Aborting!\n' + 'Watchers fired in the last 5 iterations: ' + toJson(watchLog)); } } while (dirty || asyncQueue.length); - this.$root.$$phase = null; + clearPhase(); }, @@ -469,7 +470,7 @@ function $RootScopeProvider(){ * perform any necessary cleanup. */ $destroy: function() { - if (this.$root == this) return; // we can't remove the root node; + if ($rootScope == this) return; // we can't remove the root node; var parent = this.$parent; this.$broadcast('$destroy'); @@ -586,13 +587,18 @@ function $RootScopeProvider(){ */ $apply: function(expr) { try { - flagPhase(this, '$apply'); + beginPhase('$apply'); return this.$eval(expr); } catch (e) { $exceptionHandler(e); } finally { - this.$root.$$phase = null; - this.$root.$digest(); + clearPhase(); + try { + $rootScope.$digest(); + } catch (e) { + $exceptionHandler(e); + throw e; + } } }, @@ -754,18 +760,22 @@ function $RootScopeProvider(){ } }; + var $rootScope = new Scope(); + + return $rootScope; - function flagPhase(scope, phase) { - var root = scope.$root; - if (root.$$phase) { - throw Error(root.$$phase + ' already in progress'); + function beginPhase(phase) { + if ($rootScope.$$phase) { + throw Error($rootScope.$$phase + ' already in progress'); } - root.$$phase = phase; + $rootScope.$$phase = phase; } - return new Scope(); + function clearPhase() { + $rootScope.$$phase = null; + } function compileToFn(exp, name) { var fn = $parse(exp); |
