aboutsummaryrefslogtreecommitdiffstats
path: root/src/Scope.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/Scope.js')
-rw-r--r--src/Scope.js17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/Scope.js b/src/Scope.js
index be5030cc..c4b9513b 100644
--- a/src/Scope.js
+++ b/src/Scope.js
@@ -260,7 +260,8 @@ Scope.prototype = {
watcher = {
fn: listenFn,
last: Number.NaN, // NaN !== NaN. We used this to force $watch to fire on first run.
- get: get
+ get: get,
+ exp: watchExp
};
if (!array) {
@@ -325,7 +326,8 @@ Scope.prototype = {
asyncQueue,
length,
dirty, ttl = 100,
- next, current, target = this;
+ next, current, target = this,
+ watchLog = [];
if (target.$$phase) {
throw Error(target.$$phase + ' already in progress');
@@ -356,6 +358,14 @@ Scope.prototype = {
dirty = true;
watch.last = copy(value);
watch.fn(current, value, last);
+ if (ttl < 5) {
+ if (!watchLog[4-ttl]) watchLog[4-ttl] = [];
+ if (isFunction(watch.exp)) {
+ watchLog[4-ttl].push('fn: ' + (watch.exp.name || watch.exp.toString()));
+ } else {
+ watchLog[4-ttl].push(watch.exp);
+ }
+ }
}
} catch (e) {
current.$service('$exceptionHandler')(e);
@@ -376,7 +386,8 @@ Scope.prototype = {
} while ((current = next));
if(!(ttl--)) {
- throw Error('100 $digest() iterations reached. Aborting!');
+ throw Error('100 $digest() iterations reached. Aborting!\n' +
+ 'Watchers fired in the last 5 iterations: ' + toJson(watchLog));
}
} while (dirty);
},