javascript - 是否可以在自定义组件中使用 @keyup 来定位输入元素?
问题描述
嗨,我想使用 v-on:keyup 来定位自定义组件内的输入元素,但显然我没有运气
<TextField label="Some Text" @keyup="updateLen" v-model="text" />
//javascript
computed: {
updatedLen(event) {
let target = event.value.length;
console.log('target', target)
},
}
这是自定义组件src代码
<template>
<div>
<v-text-field>@keyup="keyUp"</v-text-field>
</div>
</template>
<script>
keyUp(event)
{
this.content = this.content.replace(/([^a-z0-9-]+)/gi, '');
this.$emit('input', this.content);
},
</script>
解决方案
在自定义组件上,像这样的侦听@myEvent
器将侦听使用this.$emit
. 所以在这里,@keyup
正在监听自定义事件this.$emit('keyup')
(它不是keyup
来自 DOM 的本机事件。)
在这里,您的TextField
组件永远不会发出keyup
事件,因此您的侦听器将永远不会被触发。即使您内部有一个触发同名事件的组件,该事件也不会分派给父级,而只会分派给它的直接父级(即使用它的组件)。
你必须做什么,它会在收听它的同时再次发出事件。
<TextField label="Some Text" @keyup="updateLen" v-model="text" />
<template>
<div>
<v-text-field @keyup="keyUp"></v-text-field>
</div>
</template>
<script>
keyUp(event) {
this.content = this.content.replace(/([^a-z0-9-]+)/gi, '');
this.$emit('input', this.content); // Updates `v-model`
this.$emit('keyup', event); // Triggers your `@keyup` listener
},
</script>
如果您的TextField
组件只是一个包装器,v-text-field
并且您希望它具有完全相同的道具/侦听器,您可以禁用属性的自动继承并自行设置。
<template>
<div>
<v-text-field v-on="$listeners" v-bind="$attrs">
</div>
</template>
<script>
export default {
inheritAttrs: false, // The root element won't inherit all static attrs
}
</script>
推荐阅读
- google-dfp - 在 Google Admanager (DFP) 中从 lineitemid 获取点击次数和展示次数
- powershell - 将 PowerShell 查询输出到电子邮件
- sql - 来自 2 个表的平均函数
- bit-manipulation - 最后设置位相同的下一个数字
- c++builder - 将事件分配给在运行时动态创建的 VCL 控件 (2)
- amazon - “StandardProductID”(ASIN 和 EAN)是什么意思
- mysql - 无法启动 MYSQL 数据库 - 没有错误消息
- karate - 空手道 0.9.1 - 线程“主”java.lang.StackOverflowError 中的异常
- regex - 通过正则表达式仅模式域和类别段塞
- firebase - 如何将 Firebase 的身份验证链接到实时数据库?