socket.io - 多次加载视图时,socket.on方法也多次运行

时间:2018-01-08 11:42:12

标签: angularjs socket.io

我正在使用Framework7和AngularJS。 让我们说有一个名为:" something.js"的页面。在这个页面中有一个socket.io方法。

当加载页面一次时,socket.io方法中的操作只会触发一次(这是正确的)。

当导航到另一个页面并返回到运行something.js文件的页面时,套接字方法将被触发两次,依此类推。依此类推。

somethine.js代码:

socket.on("notification", function(notification) {
  // some code here
});

现在上面唯一的代码加载了两次,所以第一次加载something.js文件时,会弹出一次通知。 下次,通知将被加载两次,然后加载三次。

如何告诉socket.io加载socket.on一次,或者在离开页面时删除它?

它与AngularJS视图引擎或Framework7有关吗? 怎么避免这个?

1 个答案:

答案 0 :(得分:1)

这是因为订阅时组件未被销毁。实际上,您引入了内存泄漏,因为在事件存在之前,垃圾收集器无法收集您的组件。

您有两种方法可以解决这个问题:

  1. 订阅服务中的事件而不是组件,并在组件一侧注入服务并使用结果
  2. 每次销毁组件时都要手动取消订阅事件,请参阅How to unsubscribe from a socket.io subscription?
  3. 我个人更喜欢第一种方式,因为只要你需要一个订阅,就需要使用单身(服务)来保存它。