diff options
| author | Misko Hevery | 2012-09-07 11:14:48 -0700 |
|---|---|---|
| committer | Misko Hevery | 2012-09-11 16:12:41 -0700 |
| commit | 331cd5a8cb5efdafe8ad7eb386aed4033cfc1bb3 (patch) | |
| tree | 6834ecdae81eee6c69fabad67fdb5eb537cfb50f | |
| parent | f2ebfa16b0849a1ea26f73ae63dcb0e56f066646 (diff) | |
| download | angular.js-331cd5a8cb5efdafe8ad7eb386aed4033cfc1bb3.tar.bz2 | |
fix($evalAsync): have only one global async queue
Having one async queue per scope complicates the matters when users wish to do
partial scope updates, since many services put events on the rootScope. By
having single queue the programing model is simplified.
| -rw-r--r-- | src/ng/rootScope.js | 22 | ||||
| -rw-r--r-- | test/ng/rootScopeSpec.js | 2 |
2 files changed, 12 insertions, 12 deletions
diff --git a/src/ng/rootScope.js b/src/ng/rootScope.js index bd712e07..759b4c72 100644 --- a/src/ng/rootScope.js +++ b/src/ng/rootScope.js @@ -195,7 +195,6 @@ function $RootScopeProvider(){ child['this'] = child; child.$$listeners = {}; child.$parent = this; - child.$$asyncQueue = []; child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null; child.$$prevSibling = this.$$childTail; if (this.$$childHead) { @@ -362,7 +361,7 @@ function $RootScopeProvider(){ $digest: function() { var watch, value, last, watchers, - asyncQueue, + asyncQueue = this.$$asyncQueue, length, dirty, ttl = TTL, next, current, target = this, @@ -371,18 +370,19 @@ function $RootScopeProvider(){ beginPhase('$digest'); - do { + do { // "while dirty" loop dirty = false; current = target; - do { - asyncQueue = current.$$asyncQueue; - while(asyncQueue.length) { - try { - current.$eval(asyncQueue.shift()); - } catch (e) { - $exceptionHandler(e); - } + + while(asyncQueue.length) { + try { + current.$eval(asyncQueue.shift()); + } catch (e) { + $exceptionHandler(e); } + } + + do { // "traverse the scopes" loop if ((watchers = current.$$watchers)) { // process our watches length = watchers.length; diff --git a/test/ng/rootScopeSpec.js b/test/ng/rootScopeSpec.js index 2ceb0eec..9830d981 100644 --- a/test/ng/rootScopeSpec.js +++ b/test/ng/rootScopeSpec.js @@ -441,7 +441,7 @@ describe('Scope', function() { child.$evalAsync(function(scope) { log += 'child.async;'; }); child.$watch('value', function() { log += 'child.$digest;'; }); $rootScope.$digest(); - expect(log).toEqual('parent.async;parent.$digest;child.async;child.$digest;'); + expect(log).toEqual('parent.async;child.async;parent.$digest;child.$digest;'); })); it('should cause a $digest rerun', inject(function($rootScope) { |
