$广播到当前范围

2024-02-22

作为前言,我有一个 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);

我不确定处理这个问题的最佳方法是什么。


As 拉迪姆·科勒 https://stackoverflow.com/users/1679310/radim-k%C3%B6hler指出$ionicConfigProvider.views.maxCache(0)解决了这个问题cache:false就状态而言没有。你也可以这样做:

$scope.$on("$ionicView.afterLeave", function () {
        $ionicHistory.clearCache();
    });

对我来说最好的方法是只选择一个控制器来安装它并完成它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

$广播到当前范围 的相关文章

随机推荐