aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMisko Hevery2012-09-07 11:14:48 -0700
committerMisko Hevery2012-09-11 16:12:41 -0700
commit331cd5a8cb5efdafe8ad7eb386aed4033cfc1bb3 (patch)
tree6834ecdae81eee6c69fabad67fdb5eb537cfb50f
parentf2ebfa16b0849a1ea26f73ae63dcb0e56f066646 (diff)
downloadangular.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.js22
-rw-r--r--test/ng/rootScopeSpec.js2
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) {