zoukankan      html  css  js  c++  java
  • vue中的事件监听之——v-on vs .$on

    跟着视频中老师的教学视频学vue的时候,看很多时候都用@(v-on)来监听子级emit的自定义事件,但在bus总线那块,又用.$on来监听bus自身emit的事件,v-on之间似乎相似但又不同,今天对照vue官网api学习并coding了相关代码,两者的用法与比较描述如下。

    v-on vm.$on

    可监听普通dom的原生事件;

    可监听子组件emit的自定义事件;

    监听当前实例的自定义事件

    vue官网相关说明截图:

    由此可见,想监听vue实例自身自定义事件,只能用.$on并且这是vue实例的方法,不能用在普通dom上;

    v-on用在在普通dom标签上,可以监听原生事件;用在vue组件标签上,可以监听子组件emit的自定义事件;

    具体代码实践如下:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <div id="app">
                <!--监听子组件emit的自定义事件-->
                <child @change="handleChange">child1</child>
                <child @change="handleChange">child2</child>
                <child @change="handleChange">child3</child>
            </div>
        </body>
        <script type="text/javascript" src="../js/vue.js" ></script>
        <script>
            var Child = {
                template:`<div @click='handleClick'>
                    <slot></slot>
                </div>`,
                methods:{
                    handleClick(){
                        this.$emit( 'change' );
                    }
                },
                mounted(){
                    //监听当前实例的自定义change事件
                    this.$on( 'change',function(){
                        console.log( 'child-change-event-handler' );
                    } );
                }
                
            };
            var vm = new Vue({
                el:'#app',
                components:{
                    Child,
                },
                methods:{
                    handleChange(){
                        console.log( 'parent-change-event-handler' );
                    },
                    handleClick(){
                        console.log( 'handleClick' );
                    }
                },
                mounted(){
                    this.$on( 'change',this.handleChange );
                }
            });
        </script>
    </html>

     通过上述代码实例可知,一个组件实例的定义事件既可以通过.$on被自身捕获,也可以通过v-on被父级捕获。事件想要传到父级组件,必须用emit进行bubble处理。

    路漫漫其修远兮,吾将上下而求索。 May stars guide your way⭐⭐⭐
  • 相关阅读:
    SSH框架——Sprign声明式事务
    SSH框架的简化
    Spring声明式事务管理
    简化注解shh框架
    ssh 的搭建
    基础篇-spring包的下载
    基础篇-struts2的搭建
    spring声明式事务管理
    shh简化
    shh(struts+spring+Hibernate)的搭建
  • 原文地址:https://www.cnblogs.com/surfer/p/9815692.html
Copyright © 2011-2022 走看看