作为前言,我有一个 Ionic 应用程序通过 websocket 连接到 Node 服务器,而 Node 服务器通过 TCP 套接字连接到 C++ 应用程序。我有这项服务连接并提供套接字服务,但也监视nack
响应,以便它可以发出警报,通知用户错误:
(function(){
'use strict';
angular.module('tacoCorp.services')
.factory('Socket', Socket);
Socket.$inject = ['socketFactory', 'OSDP', '$rootScope'];
function Socket(socketFactory, OSDP, $rootScope) {
var socket = io('localhost:3000');
socket = socketFactory({ioSocket: socket});
socket.on('connect', function() {
console.log('connected');
});
socket.on('nack', function(data) {
console.log(data);
var error = OSDP.parse(data);
$rootScope.$broadcast('nack', error);
});
return socket;
}
}());
我在每个控制器中都有这个监听,以便它可以发出弹出窗口:
$scope.$on('nack', function(e, err) {
console.log(err);
var alertPopup = $ionicPopup.alert({
title: 'Error',
template: err.error
});
});
我的问题是,即使每个状态/视图只有一个控制器,它也会触发多次。几乎就像$destroy
没有发生或者没有删除监听器。如果我这样做仍然会发生:
var nackListener = $scope.$on('nack', function(e, err) {
console.log(e);
var alertPopup = $ionicPopup.alert({
title: 'Error',
template: err.error
});
});
$scope.$on('$destroy', nackListener);
我不确定处理这个问题的最佳方法是什么。