diff --git a/ng-websocket.js b/ng-websocket.js index ca65608..41fe976 100644 --- a/ng-websocket.js +++ b/ng-websocket.js @@ -200,18 +200,36 @@ me.$$eventMap[event] = me.$$eventMap[event] || []; for (var i = 0; i < handlers.length; i++) { - me.$$eventMap[event].push(handlers[i]); + if (me.$$eventMap[event].indexOf(handlers[i]) < 0) + me.$$eventMap[event].push(handlers[i]); } return me; }; - me.$un = function (event) { + me.$un = function () { + + var handlers = [], index, eventMap; + + Array.prototype.push.apply(handlers, arguments); + + var event = handlers.shift(); + if (typeof event !== 'string') throw new Error('$un needs a String representing an event.'); - if (typeof me.$$eventMap[event] !== 'undefined') delete me.$$eventMap[event]; + if (handlers.length == 0) { + if (typeof me.$$eventMap[event] !== 'undefined') + delete me.$$eventMap[event]; + } + else { + for (var i = 0; i < handlers.length; i++) { + index = me.$$eventMap[event].indexOf(handlers[i]); - return me; + if (index >= 0 ) { + me.$$eventMap[event].splice(index, 1); + } + } + } }; me.$$send = function (message) {