javascript - 如果我将套接字连接分配给属性,将事件侦听器应用于该属性,然后分配另一个套接字,侦听器是否仍然有效?
问题描述
在下面的代码中,我在 上创建一个套接字连接mounted()
,并将其分配给socket
属性,然后创建一个this.socket.on
侦听器来侦听messageToClient
来自服务器的事件。
如果我要更改分配给this.socket
使用@click
事件的套接字div
,是否会开始在新套接字上this.socket.on('messageToClient', (message) => {})
侦听事件?messageToClient
或者它会继续监听messageToClient
旧的原始套接字上的事件吗?
<template>
<div @click="socket = io('http://localhost:3000/test2')"></div>
</template>
<script>
export default {
data(){
return {
socket: ''
}
},
mounted(){
this.socket = io('http://localhost:3000/test1')
this.socket.on('messageToClient', (message) => {
console.log(message)
})
}
}
</script>
解决方案
socket
不,在-handler中新创建的click
不会自动监听事件,所以处理程序应该设置新的socket
. 您可以声明一个创建和初始化 的方法socket
,然后从 -handler 调用相同的mounted()
方法click
:
<template>
<div @click="setupSocket('http://localhost:30000/test2')">Setup socket</div>
</template>
<script>
export default {
data() {
return {
socket: null,
}
},
mounted() {
this.setupSocket('http://localhost:30000/test1')
},
methods: {
setupSocket(url) {
this.socket = io(url)
this.socket.on(...)
}
},
}
</script>
推荐阅读
- java - 使用双向链表的优先队列
- android - 缺少插件异常(在通道 plugins.flutter.io/firebase_core 上找不到方法 firebase#initializecore 的实现)
- logback - Logback AsyncAppender 未将日志写入底层附加程序
- r - R studio初始化卡在旧版本中
- r - 对环境的所有元素应用函数
- android - 关闭位置时如何从后台服务获取位置?
- database - SQL JOIN 返回的行数比表中的原始行数多
- php - 更改数据库连接中断时 WordPress 的重定向
- javascript - 解决 Uncaught (in promise) DOMException: play() failed 因为用户没有先与文档交互
- react-native - 如何在本机反应中使用for循环