【问题标题】:blur on custom component自定义组件模糊
【发布时间】:2021-08-13 00:21:39
【问题描述】:

我有一个自定义组件,它基本上是一个带有一些样式的输入。我想在用户关注组件时发出警报。我添加了@blur 和tabindex,但它仍然没有提醒任何东西。我的代码有什么问题?自定义组件在模糊时不会发出任何东西

<template>
  <custom-component v-model="email" @blur="showSomething" tabindex="0"/>
</template>

<script>
export default{
 data(){
  return{
    email
  };
 },
 methods{
  showSomething(){
    alert('yes')
 }
</script>

【问题讨论】:

标签: vue.js vuejs2


【解决方案1】:

由于它是一个自定义组件,您需要使用Vue's $emit() instance method 手动指定它应该发出的事件。

我不知道你的底层组件代码是什么样的,但它可以像添加 $emit('blur', $event) 到你输入的模糊处理程序一样简单:

<input v-model="xxx" ... @blur="$emit('blur', $event)">

$event is just special Vue syntax 用于在内联语句处理程序中引用原始 DOM 事件。如果您不需要访问它,可以省略它 - 只需调用 $emit 仅使用第一个参数:$emit('blur')。)

如果您已经在该组件中的模糊事件上调用了处理程序/方法,那么您也可以将$emit 添加到该方法中,只是不要忘记this

methods: {
  ...
  blurHandler() {
    ...
    this.$emit('blur');
    ...
  },
  ...
},

other solutions to this,但显式调用vm.$emit()可能是最直接明了的。

【讨论】:

  • 它是来自库的组件。我无法对组件进行任何更改
  • @allhopelost 你应该给this 解决方案看看这个,它使用Vue's .native event modifier
  • 做到了。没用。很可能是因为自定义组件中也有一个标签元素,而不仅仅是输入..
  • 您最后的选择可能是$listeners,如this answer 和文档中的further down under .native 中所述。您还可以仔细检查库本身是否没有提供任何获取模糊事件的方法或提供一些等效的方法;这是一个非常标准的事件,他们完全忽略了它是很奇怪的。
  • @allhopelost 您只能监听组件发出的事件。如果组件没有发出blur 事件,使用@blur 将不会有任何效果。你用的是什么组件库?
猜你喜欢
  • 2020-12-06
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
相关资源
最近更新 更多