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處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM