角度控制器多次

时间:2015-06-25 16:14:52

标签: angularjs sockets

我有一个带有角度的网页,我正在使用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' ...功能应该去另一个地方以避免这个。但我不知道如何这样做。

1 个答案:

答案 0 :(得分: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
  });
}