我有一个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不再拨打电话,但是下次我来时我无法连接
关于可以做些什么的任何建议?
先谢谢