угловой контроллер несколько раз

0

У меня есть веб-страница с угловым, в которой я использую ngroute для перенаправления на 3 страницы.

modulo_angular.config(function($routeProvider){
                    //config y defi de las rutas
      $routeProvider.when("/", {
          controller: "appUOM",
          controllerAs: "apuom",
          templateUrl: "home.html"
          })
          .when("/descargas", {
          controller: "appSocket",
          controllerAs: "apsocket",
          templateUrl: "descargas.html"
          })
          .when("/opciones", {
          controller: "appPhenomena",
          controllerAs: "apphen",
          templateUrl: "opciones.html"
          });
      });

У меня 3 фабрики и 3 разных контроллера. Каждая фабрика связана с одним контроллером, поэтому я могу хранить данные даже при изменении страницы.

На одной странице "descargas" у меня есть сокеты для приема данных с сервера ym node.js. Это контроллер:

function controladorSocket($http, factoryController, socket){
  var vm = this;
  vm.mensajes = factoryController.getMensajes();
  socket.on('mensaje', function(data){
    console.log(data.message);
    factoryController.addMensaje(data.message);
  });
}

И это, завод сокетов:

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

Каждый раз, когда я переключаюсь с descargas.html на другую страницу и возвращаюсь, я получаю сообщения сокета так же сильно, как и измененные, которые я сделал до этого момента.

Поэтому я думаю, что моя проблема возникает из-за того, что моя функция socket.on (функция "mensaje"... должна идти в другом месте, чтобы избежать этого. Но я не знаю, как это сделать.

Теги:
sockets

1 ответ

0

Вам придется уничтожить сокет вручную при изменении страницы:

function controladorSocket($http, factoryController, socket){
  var vm = this;
  vm.mensajes = factoryController.getMensajes();
  socket.on('mensaje', function(data){
    console.log(data.message);
    factoryController.addMensaje(data.message);
  });
  this.$on('$destroy', function(){
    //destroy socket
  });
}
  • 0
    Я получаю эту ошибку: this. $ On не является функцией с вашей функцией

Ещё вопросы

Сообщество Overcoder
Наверх
Меню