Javascript Framework 7 Vue如何阻止Firebase在不同页面上侦听更改?
假设我有Javascript Framework 7 Vue如何阻止Firebase在不同页面上侦听更改?,javascript,firebase,vue.js,html-framework-7,Javascript,Firebase,Vue.js,Html Framework 7,假设我有pageA,在那里我监听firebase文档的更改 export default { mounted() { this.$f7ready(() => { this.userChanges(); }) }, methods: { userChanges() { Firebase.database().ref('users/1').on('value', (resp) => { console.log('
pageA
,在那里我监听firebase文档的更改
export default {
mounted() {
this.$f7ready(() => {
this.userChanges();
})
},
methods: {
userChanges() {
Firebase.database().ref('users/1').on('value', (resp) => {
console.log('use data has changed');
});
}
}
}
然后我使用this..$f7.views.current.router.navigate('/pageB/')转到pageB
如果在pageB
上我对/users/1
firebase路线进行了更改,我会看到控制台中的消息:使用数据已更改
,即使我在不同的页面上
有没有办法避免这种行为,或者以某种方式卸载页面
我试图在使用导航离开pageA
之前停止侦听器,但这似乎破坏了其他一些功能。您是否正确地删除该特定数据库引用的侦听器?您必须将引用的路径保存在专用变量上才能执行此操作:
let userRef
export default {
mounted() {
this.$f7ready(() => {
this.userChanges();
})
},
methods: {
userChanges() {
userRef = Firebase.database().ref('users/1')
userRef.on('value', (resp) => {
console.log('use data has changed');
});
},
detachListener() {
userRef.off('value')
}
}
}
这样,您只需分离该特定引用的侦听器。在父级上调用它,将删除文档指定的所有侦听器:
您可以通过将单个侦听器作为参数传递给
off()。在没有参数的位置上调用off()将删除所有
该位置的侦听器
关于该主题的更多信息,请点击此处:什么是.off
中断?当您将引用传递给以前注册的处理程序时,它应该只删除该侦听器。。