Vue 事件監聽

事件監聽

v-on介紹

  • 在前端開發中,咱們須要常常和用於交互。這個時候,咱們就必須監聽用戶發生的時間,好比點擊、拖拽、鍵盤事件等等前端

  • 在Vue中如何監聽事件呢?使用v-on指令vue

  • 做用:綁定事件監聽器app

  • 縮寫:語法糖 @函數

  • 預期:Function | Inline Statement | Objectthis

  • 參數:eventspa

v-on基礎

  • 咱們用一個監聽按鈕的點擊事件,來簡單看看v-on的使用
  • 下面的代碼中,咱們使用了v-on:click="counter++」
  • 另外,咱們能夠將事件指向一個在methods中定義的函數
<div id="app">
  <h2>{{counter}}</h2>
  <button v-on:click="counter++">點擊按鈕1</button>
  <button v-on:click="btnClick()">點擊按鈕2</button>
</div>

<script src="../../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      counter: 0
    },
    methods: {
      btnClick() {
        this.counter++
      }
    }
  })
</script>

v-on也有對應的語法糖:v-on:click能夠寫成@click

<button v-on:click="counter++">點擊按鈕1</button>
  <button v-on:click="btnClick()">點擊按鈕2</button>
 <!--語法糖-->
  <button @click="counter++">點擊按鈕3</button>
  <button @click="btnClick()">點擊按鈕4</button>

v-on參數

當經過methods中定義方法,以供@click調用時,須要注意參數問題:code

  • 狀況一:若是該方法不須要額外參數,那麼方法後的()能夠不添加。
    • 可是注意:若是方法自己中有一個參數,那麼會默認將原生事件event參數傳遞進去
  • 狀況二:若是須要同時傳入某個參數,同時須要event時,能夠經過$event傳入事件。
<div id="app">
  <h2>點擊次數: {{counter}}</h2>
  <!--狀況一: 方法沒有參數-->
  <button @click="btnClick1">按鈕1</button>
  <button @click="btnClick1()">按鈕1</button>

  <!--狀況二: 若是方法有參數-->
  <!--1.調用時不傳入參數,會默認將event做爲第一個參數傳入-->
  <button @click="btnClick2">按鈕2</button>
  <!--2.調用時不傳入參數,那麼參數爲undefined-->
  <button @click="btnClick2()">按鈕2</button>

  <!--狀況三: 若是方法有參數,而且但願傳入event-->
  <button @click="btnClick3(10, $event)">按鈕3</button>
</div>

<script src="../../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      counter: 0
    },
    methods: {
      btnClick1() {
        console.log('按鈕1被點擊');
      },
      btnClick2(payload) {
        console.log('按鈕2被點擊', payload);
      },
      btnClick3(num, event) {
        console.log('按鈕3被點擊', num, event);
      }
    }
  })
</script>

v-on修飾符

在某些狀況下,咱們拿到event的目的多是進行一些事件處理。Vue提供了修飾符來幫助咱們方便的處理一些事件:orm

  • .stop - 調用 event.stopPropagation()
  • .prevent - 調用 event.preventDefault()
  • .{keyCode | keyAlias} - 只當事件是從特定鍵觸發時才觸發回調
  • .native - 監聽組件根元素的原生事件
  • .once - 只觸發一次回調
<!-- 中止冒泡 -->
<button @clcik.stop="doThis"></button>

<!-- 阻止默認行爲 -->
<button @click.prevent="doThis"></button>

<!-- 阻止默認行爲 -->
<form @submit.prevent></form>

<!-- 串聯修飾符 -->
<button @click.stop.prevent="doThis"></button>

<!-- 鍵修飾符,鍵別名 -->
<input @keyup.enter="onEnter">

<!-- 鍵修飾符,鍵代碼 -->
<input @keyup.13="onEnter">

<!-- 點擊回調只回調一次 -->
<button @click.once="doThis"></button>

擴展:事件

事件監聽機制

概念:某些組件被執行了某些操做後,觸發某些代碼的執行。seo

事件:某些操做。如: 單擊,雙擊,鍵盤按下了,鼠標移動了。事件

事件源:組件。如: 按鈕 文本輸入框...

監聽器:JavaScript代碼。

註冊監聽:將事件,事件源,監聽器結合在一塊兒。當事件源上發生了某個事件,則觸發執行某個監聽器代碼。

常見的事件

  • 點擊事件

    • onclick:單擊事件
    • ondblclick:雙擊事件
  • 焦點事件

    • onblur:失去焦點
    • onfocus: 元素得到焦點。
  • 加載事件

    • onload:一張頁面或一幅圖像完成加載。
  • 鼠標事件

    • onmousedown 鼠標按鈕被按下。
    • onmouseup 鼠標按鍵被鬆開。
    • onmousemove 鼠標被移動。
    • onmouseover 鼠標移到某元素之上。
    • onmouseout 鼠標從某元素移開。
  • 鍵盤事件

    • onkeydown 某個鍵盤按鍵被按下。
    • onkeyup 某個鍵盤按鍵被鬆開。
    • onkeypress 某個鍵盤按鍵被按下並鬆開。
    • 選擇和改變
    • onchange 域的內容被改變。
    • onselect 文本被選中。
  • 表單事件

    • onsubmit 確認按鈕被點擊。
    • onreset 重置按鈕被點擊。