closuresUrl上客户端的socket.io连接

我使用Socket.IO来绘制绘制图表的数据,在var socket = io.connect(); 我的节点js服务器的io.on('connection', function(socket){})启动一个函数,间隔每1秒它发出的数据连接的客户端。

我希望套接字closures从客户端和服务器的Url(远离应用程序)的变化应该停止发射数据。

正如我们在这个问题的评论中所讨论的那样,当Angular ngRoute控制器的部分路由从给定状态改变时,你正在寻找与套接字断开连接; 这是不同的,因为部分路由单页面应用程序不会触发全新页面,而是加载部分内容(在部分/模板文件或脚本定义中定义)。 这是FurkanBaşaran的答案为什么不能在同一个SPA内的Angular Routed状态之间进行切换的原因。

我已经准备了一个非常基本的AngularJS应用程序, 它有三个html部分,它使用ngRouter在三条相应的路由中显示,并在路由发生变化时调用一个函数<do-something>。 在这种情况下,它会抛出一个警报函数,而在这种情况下,您可能会检查路由是否不是您要提供套接字function的路由。

注意:每次Angular应用程序注册一个路由时,都会发生变化,所以初始的build立会为/ state注册一个空值,然后每次从负载改变,包括otherwise.redirectTo('/destination1')

Plunker(embedded式)链接: http ://embed.plnkr.co/ayjgYCsox7RGl5OjyGsV/

快速分解:

  1. 我首先定义了我的处理函数,以便在ngRouter变化时触发。 传递的值是已注册的path(位于//index.html ),比如我的示例中的/potatoes 。 这是你应该执行你的socket.disconnect();
 function changedMyPartialRoute(val){ alert('url has changed to: ' + val); } 
  1. 在我定义我的应用程序( angular.module('appName', [... ))之后,我定义了我的ngRouter设置的configuration。
 .config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) { $routeProvider .when('/meat', { templateUrl: 'meat.html', controller: 'MeatCtrl', controllerAs: 'meat' }) .when('/potatoes', { templateUrl: 'potatoes.html', controller: 'PotatoCtrl', controllerAs: 'potato' }) .when('/bacon', { templateUrl: 'bacon.html', controller: 'BaconCtrl', controllerAs: 'bacon' }) .otherwise({ redirectTo: '/meat' }); }]) 
  1. 最后,我调用应用程序(模块)上的运行块来提供该钩子来检测更改。 我传入$ rootScope和$ location,并在$ rootScope上执行$ watch来检测$ location.path()中的更改。 整个运行块:
 .run( function($rootScope, $location) { $rootScope.$watch(function() { return $location.path(); }, function(val){ // the handling function from step 1 changedMyPartialRoute(val); }); }) 

如果您需要使用$ rootScope来完成某些操作,就像我怀疑的那样,您需要通过changedMyPartialRoute函数来closures$ rootScope句柄, 或者直接在.run块的函数callback中定义内联处理。 这个HTML5rocks.com教程通过挂接到$ rootScope来显示他们在Angular应用程序中的configuration,而不是像上面提到的注释中提到的$ scope。

我希望有帮助!

当客户端closures自动closures连接时,如果你想看到这个,写下这个代码到你的节点服务器,并closures客户端选项卡时,查看控制台。

 io.on('disconnect', function() { console.log("Connection disconnected"); })