1. 程式人生 > >vue事件處理器

vue事件處理器

1.監聽事件

可以用v-on指令監聽DOM事件來觸發一些JavaScript程式碼
示例:

//HTML
<div id="example-1">
  <button v-on:click="counter += 1">增加 1</button>
  <p>這個按鈕被點選了 {{ counter }} 次。</p>
</div>
//JS
var example1 = new Vue({
  el: '#example-1',
  data: {
    counter: 0
  }
})

你每點選一下按鈕,下方的數字就增加1;直接採用js程式碼內嵌的方式,將count += 1

直接寫入到標籤中。

2.方法事件處理器

當JavaScript比較少的時候直接將其寫入v-on中是完全可以的,但是如果JavaScript程式碼量比較大的話,這樣寫就有些反人類了,因此v-on可以接受一個定義的方法來呼叫
示例:

//HTML
<div id="example-2">
  <!-- `greet` 是在下面定義的方法名 -->
  <button v-on:click="greet">Greet</button>
</div>
//JS
var example2 = new Vue({
  el: '#example-2'
, data: { name: 'Vue.js' }, // 在 `methods` 物件中定義方法 methods: { greet: function (event) { // `this` 在方法裡指當前 Vue 例項 alert('Hello ' + this.name + '!') // `event` 是原生 DOM 事件 alert(event.target.tagName) } } }) // 也可以用 JavaScript 直接呼叫方法 example2.greet() // -> 'Hello Vue.js!'

這裡直接將JS程式碼轉移到script標籤中統一編寫,更加方便維護

3.內聯處理器方法

除了直接繫結一個方法,也可以用內聯JavaScript語句:

//HTML
<div id="example-3">
  <button v-on:click="say('hi')">Say hi</button>
  <button v-on:click="say('what')">Say what</button>
</div>
//JS
new Vue({
  el: '#example-3',
  methods: {
    say: function (message) {
      alert(message)
    }
  }
})

有時候我們會遇到需要在內斂語句處理器中訪問原聲DOM事件的情況,這時候我們可以用特殊變數$event把它傳入方法:

//HTML
<button v-on:click="warn('Form cannot be submitted yet.', $event)">Submit</button>
//JS
// ...
methods: {
  warn: function (message, event) {
    // 現在我們可以訪問原生事件物件
    if (event) event.preventDefault()
    alert(message)
  }
}

event具體的方法呼叫見事件修飾符

4.事件修飾符

在事件處理程式中呼叫event.preventDefault()event.stopDefault()是非常常見的需求。methods雖然也可以輕鬆實現上述功能,但是methods只有純粹的資料邏輯二不是去處理DOM事件細節。
因此,Vue.js為v-on提供了事件修飾符。通過由點(.)表示的指令字尾來呼叫修飾符。
.stop
.prevent
.capture
.self
.once

// 阻止單擊事件冒泡
<a v-on:click.stop="doThis"></a>
// 提交事件不再過載頁面
<form v-on:submit.prevent="onSubmit"></form>
// 修飾符可以串聯
<a v-on:click.stop.prevent="doThat"></a>
// 只有修飾符
<form v-on:submit.prevent></form>
// 新增事件偵聽器時使用事件捕獲模式
<div v-on:click.capture="doThis">...</div>
// 只當事件在該元素本身(而不是子元素)觸發時觸發回撥
<div v-on:click.self="doThat">...</div>

//the click event will be triggered at most once
<a v-on:click.once="doThis"></a>

新新增的.once可以之間用在元件events上

5.按鍵修飾符

在監聽鍵盤事件時,我們經常需要監測常見的鍵值。Vue允許為v-on在監聽事件時新增按鍵修飾符:

//只有在 keyCode 是 13 時呼叫 vm.submit()
<input v-on:keyup.13="submit">

想要記住所有的keycode比較困難,所以vue為最常用的按鍵提供了別名,
<input v-on:keyup.enter="submit">

全部的按鍵別名:
.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right
可以通過全域性config.keyCodes 物件自定義按鍵修飾符別名
Vue.config.keyCodes.f1 = 112
可以用如下修飾符開啟滑鼠或鍵盤事件監聽,使在按鍵按下時發生響應。
.ctrl
.alt
.shift
.meta

6.使用v-on的好處

1.掃一眼HTML模板便能輕鬆定位在JavaScript程式碼裡對應的方法
2.無需再JavaScript裡手動繫結事件,viewModel程式碼尅是非常純粹的邏輯,和DOM完全解耦,更易於測試。
3.當一個viewModel被銷燬時,所有的時間處理器都會自動被刪除。無須擔心如何自己清理它們