2

У меня есть маршрут, который загрузка страницы на основе параметров:После загрузки нового маршрута старых экземпляры контроллера все еще работают

.when('/:num/:den', { 
templateUrl : 'app/views/templates/home.html', 
controller :"ProductContoller", 
controllerAs: "product", 
reloadOnSearch : false }); 

Проблема заключается в любое время, когда я перезагрузить маршрут, есть новый экземпляр контроллера вместе со всеми предыдущими экземплярами все еще запущен. У меня есть Socket.IO слушатели в моем контроллере, чтобы получить некоторые данные с сервера в случае любого обновления.

+1

Вы уверены, что вы не просто нужно, чтобы очистить ваши Socket.io слушателей? Если вы слушаете событие destroy в области видимости, вы можете убрать туда всех слушателей :) Это будет выглядеть как '$ scope. $ On ('destroy', function (/ * закрыть ваш слушатель здесь) * /) { }); ' –

+0

Проблема в том, что не происходит событие destroy – Babak

+0

Как работают другие экземпляры контроллера? –

ответ

2

В случае, если у кого-то еще такая же проблема, я использовал Socket.IO, и слушатели все еще работали, поэтому я добавил метод сокет-эмиттер, removeAllListeners, который является тем же методом, что и removeListener, removeListenerEvent и выключен. Теперь, когда я получаю событие «$ destroy», я удаляю всех этих слушателей, просто передавая аргументы методу, или я могу удалить определенные из них, указав имя событий или даже определенный обработчик, указав имя события и имя функции обработчика.

Код указан в Socke.IO источнике!

Emitter.prototype.off = 
Emitter.prototype.removeListener = 
Emitter.prototype.removeAllListeners = 
Emitter.prototype.removeEventListener = function(event, fn) 

и это, как я прошел все необходимые методы для моей службы:

.factory('socketio', ["$rootScope", function ($rootScope) { 
     var socket = io.connect(); 
     console.log(socket); 
     return { 
      on : function (eventName, callback) { 
       socket.on(eventName, function() { 
        var args = arguments; 
        $rootScope.$apply(function() { 
         callback.apply(socket, args); 
        }); 
       }); 

      }, 
      removeAllListeners : function (eventName, callback) { 
       socket.removeAllListeners(eventName, callback); 
      }, 

      emit : function (eventName, data, callback) { 
       socket.emit(eventName, data, function() { 
        var args = arguments; 
        $rootScope.apply(function() { 
         if (callback) 
          callback.apply(socket, args); 
        }); 
       }); 

      } 

     }; 

    } 
]); 
Смежные вопросы