將原生事件綁定到組件

官方的例子是晦澀難懂的,除非已經完全理解了,在這裏給大家只用通俗易懂的3個例子解釋這個問題

第一個例子

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>將原生事件綁定到組件
        </title>
        <script src="https://unpkg.com/vue"></script>
    </head>
    <body>
        <div id="app">
            <child @click="handleClick"></child>
        </div>
        <script> 
            Vue.component('child', {
                template: '<div>Child</div>'
            })
            var vm = new Vue({
                el: '#app',
                methods:{
                    handleClick() {
                        alert('click');
                    }
                }
            })
        </script>
    </body>
</html>

會出現點擊Child的時候alert彈出一個click嗎?

不會!根本不彈出來,我們的click監聽加在了自定義組件,是無法觸發的,還記得怎麼觸發自定義組件的監聽嗎?那是在子組件調用$emit方法。

那麼我們需要在原生組件加監聽怎麼做呢?在這裏,你可以在template裏面直接加上,代碼如下

第二個例子

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>將原生事件綁定到組件
        </title>
        <script src="https://unpkg.com/vue"></script>
    </head>
    <body>
        <div id="app">
            <child></child>
        </div>
        <script> 
            Vue.component('child', {
                template: '<div @click="handleClick">Child</div>',
                methods:{
                    handleClick() {
                        alert('click');
                    }
                }
            })
            var vm = new Vue({
                el: '#app'
            })
        </script>
    </body>
</html>

這樣點擊click就可彈出alert對話框了,或者methods寫在全局,然後子組件this.$emit去觸發執行也可以達到效果,但是這樣結構太混亂了,幾層傳遞太麻煩了,能不能一步到位?

當然也是可以的,就像第一個例子,在自定義組件上面寫監聽,我就想監聽這個組件裏面模板的東西,可以直接在自定義組件寫@click.native

第三個例子

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>將原生事件綁定到組件
        </title>
        <script src="https://unpkg.com/vue"></script>
    </head>
    <body>
        <div id="app">
            <child @click.native="handleClick"></child>
        </div>
        <script> 
            Vue.component('child', {
                template: '<div>Child</div>'
            })
            var vm = new Vue({
                el: '#app',
                methods:{
                    handleClick() {
                        alert('click');
                    }
                }
            })
        </script>
    </body>
</html>

這樣就完成啦,推薦這種寫法!

 

官方文檔見這裏 將原生事件綁定到組件

 

 

關注、留言,我們一起學習。

 

===============Talk is cheap, show me the code================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章