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