1. 程式人生 > >vue中的事件監聽之——v-on vs .$on

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>