详细问题描述
[内容]
uni.$off()不执行
[结果]
uni.$off()不执行
[期望]
uni.$off()执行
[如果语言难以表述清晰,拍一个视频或截图,有图有真相]
IDE运行环境说明
[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]
HBuilderX
[IDE版本号]
2.6.1
[windows版本号]
10
uni-app运行环境说明
[运行端是h5或app或某个小程序?]
H5和app
[可重现代码片段]
onUnload(){
console.log("正在清除事件")
uni.$off("getDataAgain",()=>{
console.log("销毁监听事件")
})
},
联系方式
[QQ]
1017771330
拓荒 (作者)
确实是同一个函数,H5和app端uni.$off()均无效,且回调函数也不执行,小程序还没测试
2020-03-06 17:31
DCloud_uniCloud_WYQ
回复 拓荒: 你这样写很显然就不是同一个函数了,在MDN上关于removeEventListener的说明里面有这么一句话。
注意: 如果要移除事件句柄,addEventListener() 的执行函数必须使用外部函数,如(myFunction)匿名函数,类似 "document.removeEventListener("event", function(){ myScript });" 该事件是无法移除的。
2020-03-06 17:36
DCloud_uniCloud_WYQ
https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/removeEventListener
2020-03-06 17:37
拓荒 (作者)
回复 DCloud_uniCloud_WYQ: 这个是页面加载是进行监听:
uni.$on("getDataAgain",()=>{
console.log("重新请求数据")
this.getData()
})
这个是页面卸载的时候执行销毁:
onUnload(){
console.log("正在销毁")
uni.$off("getDataAgain",()=>{
console.log("销毁监听事件")
})
},
当页面数据需要登录时会跳转到登录页面,登录成功执行
uni.$emit("getDataAgain")
这时会执行this.getData()
但是页面返回的时候
"正在销毁打印了"
但是uni.$off()没有执行
2020-03-06 17:44