美文网首页
16. 自定义事件

16. 自定义事件

作者: 论宅 | 来源:发表于2019-06-01 17:45 被阅读0次

事件名称

不同于组件和 prop,事件名不会被用作一个 JavaScript 变量名或属性名,所以就没有理由使用 camelCase 或 PascalCase 了。并且 v-on 事件监听器在 DOM 模板中会被自动转换为全小写 (因为 HTML 是大小写不敏感的),所以 v-on:myEvent 将会变成 v-on:myevent——导致 myEvent 不可能被监听到。

因此,我们推荐你始终使用 kebab-case 的事件名。

如果想要触发一个事件,如my-event

this.$emit('my-event')

自定义组件的v-model

一个组件上的v-model默认利用名为value的属性和input的事件,但是像单选框,复选框等可能将value用作其他目的,而model选项可以来避免这种冲突:

Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    <input
      type="checkbox"
      v-bind:checked="checked"
      v-on:change="$emit('change', $event.target.checked)"
    >
  `
})

这样在这个组件上使用v-model的时候

<base-checkbox v-model="lovingVue"></base-checkbox>

这里的lovingVue的值将会传入props,同时当该组件触发一个change事件的时候,这个lovingVue的属性将会被更新。

将原生事件绑定到子组件

 <template2 @click="clickMethod"></template2>

如果单纯的写上这种监听事件,会发现没有任何作用,点击事件不会生效,想要生效则需要这么写:

<template2 @click.native="clickMethod">加了native就有效果</template2>

但即使如此,如果新的组件内容比较复杂,即使在标签上如上写上onfocus,也不一定能将事件绑定到对应的input上:

<template4 @focus="console.log(123)"></template4>

var template4 = {
            template: `
            <div>点击没有任何效果?
                <input @click="this.$listeners.focus" >
                </div>

            `,
            created() {
                console.log(this.$listeners)
            },
            methods: {
                inputListeners: function () {
                    console.log("???")
                }
            },

            computed: {

            }
        }

如上,input在div中包裹着,这样focus事件是不会绑定到对应的input上,所以需要$listeners属性。

$listeners属性会保存标签上绑定来的所有事件

所以,可以通过该属性来正确调取需要的监听事件:

<input @click="this.$listeners.focus" >

相关文章

  • 16. 自定义事件

    事件名称 不同于组件和 prop,事件名不会被用作一个 JavaScript 变量名或属性名,所以就没有理由使用 ...

  • 自定义事件js

    title: 自定义事件date: 2017-06-06 15:36:04tags: 自定义事件 js的自定义事件...

  • jQuery例子记录(持续更新)

    目录: 1.自定义事件2.操作DOM(与JS原生对比) 1.自定义事件 绑定自定义事件: 事件名称refresh....

  • JavaScript之事件完整篇

    目录html原生事件自定义事件node中的自定义事件前端框架的自定义事件 一、html原生事件 1. 概念 观察者...

  • springboot之事件监听

    springboot事件监听 自定义事件 自定义事件继承至ApplicationEvent,事件类不能注册为spr...

  • this.$emit()

    this.$emit("自定义事件") 通过触发自定义事件,来给触发监听事件

  • JS中的事件

    JS中的事件 一:自定义事件 1.使用Event自定义事件 使用Event接口,可以自定义事件。但是该接口无法在事...

  • vs2017开发ActiveX(主讲OCX)(六)、添加自定义事

    添加自定义事件 前言 自定义事件与常用事件的不同之处在于它们不会被类COleControl自动触发。 自定义事件将...

  • 16.事件绑定

    HTML: JS:

  • jquery怎样绑定事件及事件函数

    绑定事件方式: 取消绑定事件方式: 事件函数列表: 自定义事件:除了系统事件外,可以通过bind方法自定义事件,然...

网友评论

      本文标题:16. 自定义事件

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