Skip to content

Commit 7712e3b

Browse files
committed
Merge pull request #1 from kasparsj/kasparsj-patch-emit
fix for $emit loop bug, when listeners were deregistered
2 parents 7ffb2d3 + e84f309 commit 7712e3b

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

src/ng/rootScope.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,6 +1175,7 @@ function $RootScopeProvider() {
11751175
$emit: function(name, args) {
11761176
var empty = [],
11771177
namedListeners,
1178+
namedListenersCopy,
11781179
scope = this,
11791180
stopPropagation = false,
11801181
event = {
@@ -1191,19 +1192,20 @@ function $RootScopeProvider() {
11911192

11921193
do {
11931194
namedListeners = scope.$$listeners[name] || empty;
1195+
namedListenersCopy = namedListeners.slice(0);
11941196
event.currentScope = scope;
11951197
for (i = 0, length = namedListeners.length; i < length; i++) {
11961198

11971199
// if listeners were deregistered, defragment the array
1198-
if (!namedListeners[i]) {
1199-
namedListeners.splice(i, 1);
1200+
if (namedListeners.indexOf(namedListenersCopy[i]) === -1) {
1201+
namedListenersCopy.splice(i, 1);
12001202
i--;
12011203
length--;
12021204
continue;
12031205
}
12041206
try {
12051207
//allow all listeners attached to the current scope to run
1206-
namedListeners[i].apply(null, listenerArgs);
1208+
namedListenersCopy[i].apply(null, listenerArgs);
12071209
} catch (e) {
12081210
$exceptionHandler(e);
12091211
}

0 commit comments

Comments
 (0)