美文网首页
vue 监听enter事件没有响应

vue 监听enter事件没有响应

作者: LingSun | 来源:发表于2019-08-06 19:52 被阅读0次
场景如下:
<el-input v-model="phone" placeholder="请输入联系电话" @keyup.enter="onQuery"></el-input>
现象:

输入联系电话按回车,onQuery 没有执行

解决方案:

@keyup.enter 后面添加 .native

<el-input v-model="form.phone" placeholder="请输入联系电话" @keyup.enter.native="onQuery"></el-input>
方案解析:

.native 修饰符是用来注册元素的原生事件而不是组件自定义事件
也就是说,当父组件给子组件绑定一个原生事件时,子组件可视为普通的HTML标签,需要添加 .native 才能触发事件。

例子:
<template>
  <input v-model="form.phone" placeholder="请输入联系电话" @change="onChange" />
</template>
export default {
  name: 'input',
  methods: {
    onChange() {
      this.$emit('schange') // 触发 `vclick` 事件
    }
  }
}

引入 input.vue 组件

<sInput @change="onChange" @schange="onSchange"></sInput>
import sInput from '@/components/input'
export default {
  components: { sInput },
  methods: {
    onChange() {
       // 此处不会执行 因为组件中未定义 `change` 事件
      console.log('执行了子组件上的 change 事件') 
    },
    onSchange () {
      // 触发 `schange` 自定义事件
      console.log('执行了自组件上的 schange 事件') 
    }
  }
}

将子组件使用方式改为:

<sInput @change.native="onChange" @schange="onSchange"></sInput>

这个时候 change 事件 和 schange 事件 都会被触发

相关文章

网友评论

      本文标题:vue 监听enter事件没有响应

      本文链接:https://www.haomeiwen.com/subject/vzawdctx.html