javascript - Angular 中的路由更改后 Socket.io 停止工作

标签 javascript angularjs sockets

问题

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

代码

app.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: '/'
                });
    });

r1Ctrl.js

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

最佳答案

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

关于javascript - Angular 中的路由更改后 Socket.io 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27668501/

相关文章:

php - 使用 mysql 数据库根据第一个下拉框自动填充第二个下拉框

javascript - AngularJS 1.3 路由不起作用; Controller 从未调用过

javascript - 数据在 Controller 中可用,但在 html 中无法解析

python - 重复/连续 python 服务器和客户端

java - 电子邮件客户端如何处理来自 POP 服务器的邮件?

JavaScript 表单提交

javascript - 将验证添加到动态创建的文本框 JavaScript PHP

javascript - 添加div和输入框

javascript - 动态 ng-model 到 ng-repeat AngularJS

c - sendto()函数中发送一个结构体——C语言