2014-12-27 2 views
0

PoblemSocket.io перестает работать после изменения маршрута в угловом

У меня есть простое Угловое приложение с 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

Возможно, вы обновляете страницу? – sbaaaang

+0

http://bevereq.com/ –

+0

вы должны отлаживать немного больше, используйте console.log(), когда сокет вверх и т. Д. ...: P – sbaaaang

ответ

1

Даже если оставить r1, сокет слушатель остается зарегистрированным. Когда вы снова посещаете r1, для одного и того же события регистрируется другой прослушиватель. Единственное объяснение вашей проблемы заключается в том, что ваш обратный вызов не строится с учетом этого факта и не выполняет работу, если это уже сделано.

+0

Спасибо, я подумаю на этих строках. –