Vue JS - 条件 keyup.enter 不工作
Vue JS - Conditional keyup.enter is not working
我正在尝试实现一个有条件的 keyup 事件,但是当我使用计算的 属性 为 @[listenToKeyup].[=12= 有条件地实现它时,keyup.enter 没有被触发]
<template>
<div>
<input @[listenToKeyup]="manageSearch"
v-model="input"
class="form-input"/>
</div>
</template>
export default {
props: {
skipSearch: {
type: Boolean,
required: false,
default: false
},
callback: {
required: false
},
},
setup(props, {emit}) {
const input = ref('');
const listenToKeyup = computed(() => props.skipSearch ? 'keyup.enter' : 'keyup');
function manageSearch() {
clearTimeout(searchTimeout)
searchTimeout = setTimeout(props.callback(input.value), debounce);
}
return {
input,
listenToKeyup,
manageSearch,
};
}
在这个例子中,props.skipSearch 在另一个组件中被注册为 true,实际上 'manageSearch' 没有被触发,而在它为 false 的其他组件中,它被触发了。这意味着正在确定 listenToKeyup 中的条件,但是 keyup.enter 没有被触发。如果我尝试在没有条件 '@keyup.enter="manageSearch"' 的情况下添加事件,它会正常工作,所以这也没有问题。
有人可以告诉我我做错了什么吗?
问题是event-modifier。
可以使用动态事件,但不支持修饰符。
您必须将您的逻辑更改为@Boussadjra Brahim 几乎建议的内容,不同之处在于必须手动编写修饰符:
//manage Search
function manageSearch(event) {
if (!props.skipSearch|| ["Enter"].includes(event.key)) {
//do your thing
}
}
Codesandbox example
我正在尝试实现一个有条件的 keyup 事件,但是当我使用计算的 属性 为 @[listenToKeyup].[=12= 有条件地实现它时,keyup.enter 没有被触发]
<template>
<div>
<input @[listenToKeyup]="manageSearch"
v-model="input"
class="form-input"/>
</div>
</template>
export default {
props: {
skipSearch: {
type: Boolean,
required: false,
default: false
},
callback: {
required: false
},
},
setup(props, {emit}) {
const input = ref('');
const listenToKeyup = computed(() => props.skipSearch ? 'keyup.enter' : 'keyup');
function manageSearch() {
clearTimeout(searchTimeout)
searchTimeout = setTimeout(props.callback(input.value), debounce);
}
return {
input,
listenToKeyup,
manageSearch,
};
}
在这个例子中,props.skipSearch 在另一个组件中被注册为 true,实际上 'manageSearch' 没有被触发,而在它为 false 的其他组件中,它被触发了。这意味着正在确定 listenToKeyup 中的条件,但是 keyup.enter 没有被触发。如果我尝试在没有条件 '@keyup.enter="manageSearch"' 的情况下添加事件,它会正常工作,所以这也没有问题。
有人可以告诉我我做错了什么吗?
问题是event-modifier。
可以使用动态事件,但不支持修饰符。
您必须将您的逻辑更改为@Boussadjra Brahim 几乎建议的内容,不同之处在于必须手动编写修饰符:
//manage Search
function manageSearch(event) {
if (!props.skipSearch|| ["Enter"].includes(event.key)) {
//do your thing
}
}