在 VueJs 中按功能处理按键
Handle key press by function in VueJs
在我的组件中,我像这样使用 VueStrap 的模态:
<template>
<modal-window v-model="show" v-on:keyup="keyHandler($event)" @ok="submit()" @cancel="cancel()" @closed="close()" ... >
...
</modal-window>
...
</template>
<script>
...
methods: {
keyHandler (event) {
console.log(event);
}
},...
</script>
我希望在打开该模式时处理按键,并确保在按下 enter 时提交模式或在按下 esc 时关闭模式。
我添加了自定义函数 keyHandler
,遗憾的是它从未被触发。你能告诉我如何修复代码以处理该函数中的按键操作吗?或者什么时候关闭和提交 vue 表带模式的更好方法我将不胜感激。谢谢。
您可以将事件处理程序附加到 window
,这样您就可以接收所有关键事件并根据模态的状态采取相应的行动:
Vue.component('modal', {
template: '<div>test modal</div>',
});
new Vue({
el: "#app",
created() {
window.addEventListener('keydown', (e) => {
if (e.key == 'Escape') {
this.showModal = !this.showModal;
}
});
},
data: {
showModal: true
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
<modal v-show="showModal"></modal>
</div>
或者,您可能需要考虑在 Vue (docs, github) 中使用 v-hotkey
指令进行键输入。如果您必须考虑几个不同的键输入,这将使您的代码相对干净和简单。
1。安装它:
npm i --save v-hotkey
拥有 Vue 'use' 它:
从“v-hotkey”导入 VueHotkey;
Vue.use(VueHotkey);
3。将它应用于您的 Vue 组件,如下所示:
<template>
<modal-window ... v-hotkey="keymap">
...
</modal-window>
</template>
<script>
...
data() {
return {
showModal: false
};
},
computed: {
keymap() {
return {
"esc": this.toggleModal
};
}
},
methods: {
toggleModal() {
this.showModal = !this.showModal;
}
}
</script>
最简单的方法
<input v-on:keyup.13="whatkey()" type="text"> <br>
查找是否按下回车键然后触发一个名为 whatkey 的方法。
30
You can attach your event handler to window, that way you can receive all key events and act accordingly depending on your modal's state:
Vue.component('modal', {
template: '<div>test modal</div>',
});
new Vue({
el: "#app",
created() {
window.addEventListener('keydown', (e) => {
if (e.key == 'Escape') {
this.showModal = !this.showModal;
}
});
},
data: {
showModal: true
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">`enter code here`
<modal v-show="showModal"></modal>
</div>
在我的组件中,我像这样使用 VueStrap 的模态:
<template>
<modal-window v-model="show" v-on:keyup="keyHandler($event)" @ok="submit()" @cancel="cancel()" @closed="close()" ... >
...
</modal-window>
...
</template>
<script>
...
methods: {
keyHandler (event) {
console.log(event);
}
},...
</script>
我希望在打开该模式时处理按键,并确保在按下 enter 时提交模式或在按下 esc 时关闭模式。
我添加了自定义函数 keyHandler
,遗憾的是它从未被触发。你能告诉我如何修复代码以处理该函数中的按键操作吗?或者什么时候关闭和提交 vue 表带模式的更好方法我将不胜感激。谢谢。
您可以将事件处理程序附加到 window
,这样您就可以接收所有关键事件并根据模态的状态采取相应的行动:
Vue.component('modal', {
template: '<div>test modal</div>',
});
new Vue({
el: "#app",
created() {
window.addEventListener('keydown', (e) => {
if (e.key == 'Escape') {
this.showModal = !this.showModal;
}
});
},
data: {
showModal: true
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
<modal v-show="showModal"></modal>
</div>
或者,您可能需要考虑在 Vue (docs, github) 中使用 v-hotkey
指令进行键输入。如果您必须考虑几个不同的键输入,这将使您的代码相对干净和简单。
1。安装它:
npm i --save v-hotkey
拥有 Vue 'use' 它:
从“v-hotkey”导入 VueHotkey; Vue.use(VueHotkey);
3。将它应用于您的 Vue 组件,如下所示:
<template>
<modal-window ... v-hotkey="keymap">
...
</modal-window>
</template>
<script>
...
data() {
return {
showModal: false
};
},
computed: {
keymap() {
return {
"esc": this.toggleModal
};
}
},
methods: {
toggleModal() {
this.showModal = !this.showModal;
}
}
</script>
最简单的方法
<input v-on:keyup.13="whatkey()" type="text"> <br>
查找是否按下回车键然后触发一个名为 whatkey 的方法。
30
You can attach your event handler to window, that way you can receive all key events and act accordingly depending on your modal's state:
Vue.component('modal', {
template: '<div>test modal</div>',
});
new Vue({
el: "#app",
created() {
window.addEventListener('keydown', (e) => {
if (e.key == 'Escape') {
this.showModal = !this.showModal;
}
});
},
data: {
showModal: true
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">`enter code here`
<modal v-show="showModal"></modal>
</div>