我正在使用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有关吗? 怎么避免这个?
答案 0 :(得分:1)
这是因为订阅时组件未被销毁。实际上,您引入了内存泄漏,因为在事件存在之前,垃圾收集器无法收集您的组件。
您有两种方法可以解决这个问题:
我个人更喜欢第一种方式,因为只要你需要一个订阅,就需要使用单身(服务)来保存它。