【发布时间】:2021-03-16 05:14:05
【问题描述】:
我正在为一个 VueJs 项目使用流行的 vue-select 组件。我想自定义一个 keyDownEvent 并查看文档以了解如何实现这一点。我遇到了一个使用现代 JS 技术组合的神秘示例。
<template>
<v-select
taggable
multiple
no-drop
:map-keydown="handlers"
placeholder="enter an email"
/>
</template>
<script>
export default {
name: 'CustomHandlers',
data: {
variableIwantAccessTo: []
},
methods: {
handlers: (map, vm) => ({
...map, 50: e => {
e.preventDefault();
if( e.key === '@' && vm.search.length > 0 ) {
vm.search = `${vm.search}@gmail.com`;
}
},
}),
},
};
</script>
我了解 if 块中的简单逻辑,但我不了解导致它的所用技术的组合。我在自定义实现中遇到的主要问题是丢失了 this 对象的上下文。我想要这样的东西:
handlers: (map, vm) => ({
...map, 50: e => {
e.preventDefault();
if( e.key === '@' && vm.search.length > 0 ) {
console.log(this.variableIwantAccessTo);
}
},
我不知道如何通过这个实现传递它。 这是文档的参考:https://vue-select.org/guide/keydown.html#mapkeydown
【问题讨论】:
-
哦,
vm不是我想的 Vue 实例。您必须将handler: (map, vm) => ({/*...*/})更改为handler(map, vm) { return {/*...*/} },这样您就可以使用this作为Vue 实例。 -
我用 Eason Yus 的答案尝试了这个,它甚至在第一个箭头函数开始时立即注册为未定义。
-
没有看到您尝试过的代码,我情不自禁。这是我描述的一个工作演示:codepen.io/tony19/pen/ExgPEKV
-
啊,是的,这也是我更喜欢的写法。实际上,我只是在您的帖子之前使用 function() {} 而不是箭头符号自己解决了这个问题。
标签: javascript vue.js this arrow-functions ellipsis