我的 Component_1 中有一个函数:
methods: {
interactBoxToggel () {
let page = this.$refs.Home.nativeView;
let interactBox = page.getViewById( 'interactBox' );
console.log( interactBox );
}
} ,
mounted () {
bus.$on( 'interactBoxToggel' , this.interactBoxToggel )
}
如果它是从 Component_1 内部
触发的,则始终有效现在,我将其移植到 Component_2 :
methods: {
buttonCotrol( buttonName ) {
bus.$emit( 'interactBoxToggel' );
console.log(buttonName);
}
}
它也可以使用,但是如果我通过“滑动关闭”( Android 9全屏手势)退出应用程序,然后再次返回应用程序,并从 Component_2 内部调用它strong>,我会收到错误消息:
System.err: An uncaught Exception occurred on "main" thread.
System.err: Calling js method onTouch failed
System.err: TypeError: Cannot read property 'nativeView' of undefined
System.err:
...
为什么会这样?我该怎么解决?
答案 0 :(得分:1)
您每次在mounted
回调中添加事件侦听器。关闭应用程序后,该组件将被销毁并在恢复时再次安装,因此您将有2个活动的侦听器,但对于该会话而言仅一个有效。关闭和打开的次数越多,您将添加的听众就越多。
您必须在侦听器销毁后将其删除。
destroyed() {
bus.$off("interactBoxToggel", this.interactBoxToggel);
}