Poblem
我有一个简单的Angular应用程序,有3条路线:r1,r2,r3。 r1的控制器具有套接字事件的监听器。这是启动应用程序时加载的第一条路径。应用程序启动时,工作正常。但是,当我导航到r2 / r3然后返回到r1时,套接字停止工作。控制台中没有错误。
代码
app.js
var host = "http://myhost.com";
var socket = io(host + ':3000');
angular
.module('myApp', [
'ngRoute'
])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/r1.html',
controller: 'r1Ctrl'
})
.when('/r2', {
templateUrl: 'views/r2.html',
controller: 'r2Ctrl'
})
.when('/r3', {
templateUrl: 'views/r3.html',
controller: 'r3Ctrl'
})
.otherwise({
redirectTo: '/'
});
});
r1Ctrl.js
angular.module('myApp')
.controller('r1Ctrl', function ($scope) {
// Listeners
socket.on('event1', function (data) {
$scope.$apply(function () {
...
});
});
...
});
答案 0 :(得分:1)
即使你离开r1,套接字监听器仍然是注册的。当您再次访问r1时,另一个侦听器将注册同一事件。对你的问题的唯一解释是你的回调并没有考虑到这个事实,如果已经完成就无法完成工作。