hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • Vue笔记

    • 基础

    • 组件

      • 使用组件的细节点
        • 解析 DOM 模板时的注意事项
        • 子组件内的data要使用函数返回
        • 通过 ref 引用操作DOM
      • 父组件给子组件传值
        • 单向数据流
        • 父子组件间传递数据 demo
      • 子组件派发事件和值给父组件
        • 父子组件间传递数据 demo
      • Prop 验证 与 非 Prop 的 Attribute
        • Prop 验证
        • 非 Prop 的 Attribute
          • 用处
      • 自定义事件
        • 兄弟组件传值
        • 非父子组件传值
        • 父组件调用子组件方法并传入值
        • 插槽slot
          • 插槽
            • 默认值
          • 具名插槽
          • 作用域插槽
            • 作用:
          • 具名插槽的缩写
          • Demo
        • 动态组件与 v-once 指令
          • 动态组件
            • 动态组件 demo
          • v-once 指令
            • 通过 v-once 创建低开销的静态组件
        • vue父子组件的生命周期顺序
        • 过渡&动画

        • 可复用性&组合

        • 工具

        • 规模化

        • Vuex

        • 其他

      • vuepress

      • nginx

      • 前端
      • Vue笔记
      • 组件
      xugaoyi
      2020-02-15
      目录

      自定义事件

      # 自定义事件

      API (opens new window)

      # 在组件标签v-on绑定的事件是自定义事件

      <div id="root">
          <child @click="handleClick"></child> <!--这里click是自定义事件-->
      </div>
      
      <script type="text/javascript">
          Vue.component('child', {
              template: '<button>Child</button>',
          })
      
          var vm = new Vue({
              el: '#root'
              methods: {
                  handleClick() {
                      alert('click')
                  }
              }
          })
      </script>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18

      上面这种情况,当点击子组件时并不会触发handleClick()事件,因为此时的click并非原生的点击事件,而是一个自定义事件。

      要想触发组件标签中的click事件需要通过子组件$emit来派发

      <div id="root">
          <child @click="handleClick"></child>
      </div>
      
      <script type="text/javascript">
          Vue.component('child', {
              template: '<button @click="handleChildClick">Child</button>', // 这里的click是原生事件
              methods: {
                  handleChildClick() {
                      this.$emit('click')
                  }
              }
          })
      
          var vm = new Vue({
              el: '#root'
              methods: {
                  handleClick() {
                      alert('click')
                  }
              }
          })
      </script>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23

      上面代码中,子组件内的click是原生点击事件,通过$emit派发click自定义事件触发父组件的handleClick()

      # 使自定义事件变为原生事件

      使用.native修饰符把自定义事件变为原生事件

      <div id="root">
          <child @click.native="handleClick"></child> <!--自定义事件添加了native修饰符变原生事件-->
      </div>
      
      <script type="text/javascript">
          Vue.component('child', {
              template: '<button>Child</button>',
          })
      
          var vm = new Vue({
              el: '#root'
              methods: {
                  handleClick() {
                      alert('click')
                  }
              }
          })
      </script>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18

      上面代码中,自定义事件click添加了.native修饰符,使其变为原生事件,从而触发handleClick()。

      # 自定义事件名会自动变小写

      当使用camelCase(驼峰)命名的自定义函数

      this.$emit('myEvent')
      
      1

      则监听这个名字的 kebab-case(烤串) 版本是不会有任何效果的:

      <!-- 没有效果 -->
      <my-component v-on:my-event="doSomething"></my-component>
      
      1
      2

      v-on 事件监听器在 DOM 模板中会被自动转换为全小写 (因为 HTML 是大小写不敏感的),所以 v-on:myEvent 将会变成 v-on:myevent——导致 myEvent 不可能被监听到。

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

      编辑 (opens new window)
      #Vue
      Prop 验证 与 非 Prop 的 Attribute
      兄弟组件传值

      ← Prop 验证 与 非 Prop 的 Attribute 兄弟组件传值→

      最近更新
      01
      人生前期重要的能力
      05-17
      02
      防火墙命令
      04-11
      03
      docker-compose部署mysql主从集群
      03-22
      更多文章>
      Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
      • 跟随系统
      • 浅色模式
      • 深色模式
      • 阅读模式