首页 > 解决方案 > NativeView 在返回应用后捕获 Exception: TypeError

问题描述

我的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 Fullscreen Gesture)退出应用程序并再次返回应用程序并从Component_2内部调用它,我会收到错误消息:

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: 
...

为什么会发生这种情况?我该如何解决?

标签: nativescript

解决方案


您每次都在mounted回调时添加事件侦听器。当应用程序关闭时,组件将被销毁并在恢复时再次挂载,因此您将有 2 个活动侦听器,但只有一个对会话有效。您关闭和打开多少次,您将添加多少个听众。

当监听器被销毁时,您必须移除它。

    destroyed() {
        bus.$off("interactBoxToggel", this.interactBoxToggel);
    }

推荐阅读