javascript - 仅在一个 Vue Router 页面上处理 keydown 事件

标签 javascript vue.js vue-router

在我的 Vue.js SPA 中,我有一个页面想要实现键盘交互。我使用 Vue Router 来方便链接。

到目前为止我已经注册

const interactiveComponent = {
    //
    methods: {
        handleKeyboard(event) {
            // do something
        }
    },
    created() {
        document.addEventListener('keydown', this.handleKeyboard);
    },
    //
};

问题是当我离开该页面时,处理程序仍然处于事件状态。

更糟糕的问题是,当我访问该页面,然后离开并返回时,处理程序会再次注册,并且我的事件会运行两次。

Vue.js 中是否存在任何约定来容纳这种处理程序?

最佳答案

您需要在 beforeDestroydestroyed Hook 中删除该事件监听器..

const interactiveComponent = {
    //
    methods: {
        handleKeyboard(event) {
            // do something
        }
    },
    created() {
        document.addEventListener('keydown', this.handleKeyboard);
    },
    beforeDestroy() {
        document.removeEventListener('keydown', this.handleKeyboard);
    },
};

关于javascript - 仅在一个 Vue Router 页面上处理 keydown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58044847/

相关文章:

javascript - 为什么 Javascript Singleton 是这样写的?

javascript - 我可以通过使用该对象中的另一个值来获取数组中对象内部的特定值吗?

javascript - Skrollr 在 IOS 中不起作用,尽管我已经用 Skrollr Body 包裹了 body

php - 使用javascript强制下载

javascript - Vuejs - 提交后重新聚焦输入字段

vue.js - Vuex 商店自动更新

javascript - Vue.js - 当动态变量不存在时加载替代组件

laravel - [Vue警告]:未知的自定义元素:<post>-您是否正确注册了组件?

java - 有没有办法让elasticsearch(5.5)按关键字和属性自动完成搜索?

vue.js - Vue-Router 中的未知元素 : <router-view> - did you register the component correctly?