Angularjs socket.io eventlistener没有被删除

时间:2014-04-24 13:36:10

标签: node.js angularjs socket.io

我有一个Node.js + Angular.js和socket.io

的应用程序

套接字创建为工厂,如下所示

app.factory('socket', function ($rootScope, $window) {
    var socket = io.connect('', {
        query: 'token=' + $window.sessionStorage.token      
      }); //The token is included as part of JWT security. 
    return {
        on: function (eventName, callback) {
            socket.on(eventName, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    callback.apply(socket, args);
                });
            });
        },
        emit: function (eventName, data, callback) {
            socket.emit(eventName, data, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    if (callback) {
                        callback.apply(socket, args);
                    }
                });
            })
        }
    };
});

在控制器中正在注入此套接字

app.controller('MyController',function
                ($scope,$http,$routeParams,$rootScope,socket,$filter){
           . . . .
        });

正在用作

dataList.forEach(function(dataNo){
   socket.on('DATA_CHANNEL:' + dataNo, function (data) {
    scope.resultData[index]['changed'] = data.changed; // some data change happens
   }             
});

所有这些都有效,但如果我转到应用程序中的其他链接,这些DATA_CHANNEL *侦听器仍然存在。因为如果我关闭node.js服务器,我得到套接字无法连接等异常,所以它们仍然存在。

我尝试实现ScopedSocket并删除这里提到的所有侦听器Improve this AngularJS factory to use with socket.io 但听众仍然存在。

如果我断开插座,Listners不再拨打电话,但是下次我来时我无法连接

关于可以做些什么的任何建议?

先谢谢

0 个答案:

没有答案