溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue.js 事件處理器 v-on

發布時間:2020-06-19 19:04:07 來源:網絡 閱讀:1906 作者:frwupeng517 欄目:開發技術

Vue.js官方文檔對于 v-on 這一常用指令提供了縮寫方法,看看官網是怎么介紹的


<!-- 完整語法 -->
<a v-on:click="doSomething"></a>

<!-- 縮寫 -->
<a @click="doSomething"></a>


1、方法事件處理器

可以用 v-on 指令監聽DOM事件

<div id="box">
    <button class="btn btn-success" v-on:click="showMsg">`msg`</button>
</div>


綁定一個單機事件的處理方法showMsg到methods中

var vm = new Vue({
    el:'#box', //el指代選擇器如 id,class,tagName
    data:{
        msg:'點擊按鈕', 
        name:'Vue.js'
    },
    methods:{  //在methods對象中定義方法
        showMsg: function(e){
            //方法中的this,指代new Vue這個實例對象,可以再次驗證下
            console.log(this);
            //event 是原生DOM事件
            console.log(e.target); //打印出事件源對象button
            console.log('Hello' + this.name + '!');
        }
    }
});


查看頁面效果截圖

Vue.js 事件處理器  v-on


2、內聯語句處理器

除了直接綁定到一個方法里面,也可以用內聯Javascript語句

<div class="app">
    <button class="btn btn-default" v-on:click="say('hi')">Say Hi</button> 
    <!--嘗試用下v-on的縮寫方法 @click-->
    <button class="btn btn-primary" @click="say('what')">Say What</button>
</div>
var vm2 = new Vue({
    el:'.app',
    methods:{
        say: function(msg){ //把方法里面的參數打印出來
            console.log(msg);
        }
    }
});


查看頁面效果截圖

Vue.js 事件處理器  v-on

有時也需要在內聯語句處理器中訪問原生DOM事件,比如阻止鏈接跳轉??梢杂锰厥庾兞?event把它傳入方法:

<div class="app">
    <a >打開Vue官網</a>
</div>
var vm2 = new Vue({
    el:'.app',
    data:{
        test:'阻止鏈接跳轉'
    },
    methods:{
        stop: function(test, e){
            e.preventDefault();
            alert(test);
        }
    }
});


點擊a鏈接以后,頁面還能跳轉到vue官網嗎?看看頁面效果截圖

Vue.js 事件處理器  v-on


3、事件修飾符

在事件處理器中經常需要調用event.preventDefault()或event.stopPropagation()。盡管在方法內可以輕松做到(如上例所示),不過讓方法是純粹的數據邏輯而不處理DOM事件細節會更好。


為了解決這個問題,Vue為v-on提供了兩個事件修飾符:.prevent和.stop

<!-- 阻止單擊事件冒泡 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重載頁面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修飾符可以串聯 -->
<a v-on:click.stop.prevent="doThat">

<!-- 只有修飾符 -->
<form v-on:submit.prevent></form>

<!-- 添加事件偵聽器時使用 capture 模式 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只當事件在該元素本身(而不是子元素)觸發時觸發回調 -->
<div v-on:click.self="doThat">...</div>

Vue.js 事件處理器  v-on

看一小段代碼理解下上面的大段內容:

<div id="container">

    <!-- 阻止頁面跳轉 -->
    <a v-on:click.prevent="doThis" >doThis</a>

</div>
var vm3 = new Vue({
    el:'#container',
    methods: {
        doThis: function () {

        }
    }
});

最終的實際結果就是,點擊a鏈接,并不會跳轉到Vue官網,完全實現了我們預期的效果。


再來看一個關于.self的例子

<div id="app">
    <div @click.self="test" class="a">a
        <div class="b">b</div>
    </div>
</div>
var vm4 = new Vue({
    el:'#app',
    data:{
        items:'test'
    },
    methods:{
        test: function(e){
            console.log(e);
        }
    }
})


根據Vue的文檔解釋“只當事件在該元素本身(而不是子元素)觸發時觸發回調”,所以點class為a的div時觸發了事件,點class為b的div時則不會

Vue.js 事件處理器  v-on


4、按鍵修飾符

http://dapengtalk.blog.51cto.com/11549574/1860203

在這邊博文中,我專門復習了keycode的相關知識。在Vue中也專門為鍵盤監聽事件提供了一系列的按鍵修飾符

<!-- 只有在 keyCode 是 13 時調用 vm.submit() -->
<input v-on:keyup.13="submit">
<!-- 同上 -->
<input v-on:keyup.enter="submit">


全部的按鍵別名:

  • enter

  • tab

  • delete

  • esc

  • space

  • up

  • down

  • left

  • right


5、為什么在HTML中監聽事件?

(1)、掃一眼HTML模板便能輕松定位在Javascript代碼里對應的方法。

(2)、因為你無需在Javascript里手動綁定事件,你的ViewModel代碼可以是非常純粹的邏輯,和DOM完全解耦,更易于測試。

(3)、當一個ViewModel被銷毀時,所有的事件處理器都會被自動刪除,你無需擔心如何自己清楚它們


學習的過程中參考了以下文檔,誠摯感謝

http://cn.vuejs.org/guide/events.html

http://blog.csdn.net/qq20004604/article/details/52413898



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女