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/
快速分解:
- 我首先定义了我的处理函数,以便在ngRouter变化时触发。 传递的值是已注册的path(位于
/
或/index.html
),比如我的示例中的/potatoes
。 这是你应该执行你的socket.disconnect();
。
function changedMyPartialRoute(val){ alert('url has changed to: ' + val); }
- 在我定义我的应用程序(
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' }); }])
- 最后,我调用应用程序(模块)上的运行块来提供该钩子来检测更改。 我传入$ 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"); })