Socket.io 在 Angular 中更改路线后停止工作

Socket.io stops working after route change in Angular

本文关键字:改路 停止工作 io Angular Socket      更新时间:2023-09-26

>Poblem

我有一个简单的 Angular 应用程序,有 3 条路由:r1、r2、r3。r1 的控制器具有套接字事件的侦听器。这是启动应用时加载的第一个路由。启动应用程序时一切正常。但是,当我导航到 r2/r3 然后返回 r1 时,套接字停止工作。控制台中没有错误。

法典

应用.js

var host = "http://myhost.com";
var socket = io(host + ':3000');
angular
    .module('myApp', [
        'ngRoute'
    ])
    .config(function ($routeProvider) {
        $routeProvider
                .when('/', {
                    templateUrl: 'views/r1.html',
                    controller: 'r1Ctrl'
                })
                .when('/r2', {
                    templateUrl: 'views/r2.html',
                    controller: 'r2Ctrl'
                })
                .when('/r3', {
                  templateUrl: 'views/r3.html',
                  controller: 'r3Ctrl'
                })
                .otherwise({
                    redirectTo: '/'
                });
    });

r1按.js

angular.module('myApp')
    .controller('r1Ctrl', function ($scope) {
        // Listeners
        socket.on('event1', function (data) {
            $scope.$apply(function () {
                ...
            });
        });
        ...
});

即使您离开 r1,套接字侦听器仍保持注册状态。当您再次访问 r1 时,将为同一事件注册另一个侦听器。对你的问题的唯一解释是,你的回调没有考虑到这一事实,如果已经完成,也无法完成工作。