事件處理

監(jiān)聽事件


可以用v-on指令監(jiān)聽DOM事件酝掩,并在觸發(fā)運行一些js代碼。
示例:

<div id="example-1">
//v-on 可以直接執(zhí)行一段代碼或者一個方法
  <button v-on:click="counter += 1">Add 1</button>
  <p>The button above has been clicked {{ counter }} times.</p>
</div>

var example1 = new Vue({
  el: '#example-1',
  data: {
    counter: 0
  }
})

事件處理方法


v-on可以接收一個方法:

<div id="example-2">
  <!-- `greet` 是在下面定義的方法名 -->
  <button v-on:click="greet">Greet</button>
</div>

var example2 = new Vue({
  el: '#example-2',
  data: {
    name: 'Vue.js'
  },
  // 在 `methods` 對象中定義方法
  methods: {
    greet: function (event) {
      // `this` 在方法里指向當(dāng)前 Vue 實例
      alert('Hello ' + this.name + '!')
      // `event` 是原生 DOM 事件
      if (event) {
        alert(event.target.tagName)
      }
    }
  }
})

// 也可以用 JavaScript 直接調(diào)用方法
example2.greet() // => 'Hello Vue.js!'

內(nèi)聯(lián)處理器中的方法


除了直接綁定到一個方法口四,也可以在內(nèi)聯(lián)js語句中調(diào)用方法:

<div id="example-3">
  <button v-on:click="say('hi')">Say hi</button>
  <button v-on:click="say('what')">Say what</button>
</div>

new Vue({
  el: '#example-3',
  methods: {
    say: function (message) {
      alert(message)
    }
  }
})

又是也需要在內(nèi)聯(lián)語句處理器中訪問原始的DOM事件羊异。可以用特殊變量$event把它傳入方法:

<button v-on:click="warn('Form cannot be submitted yet.', $event)">
  Submit
</button>

//事件
methods: {
  warn: function (message, event) {
    // 現(xiàn)在我們可以訪問原生事件對象
    if (event) {
      event.preventDefault()
    }
    alert(message)
  }
}

事件修飾符


在事件處理程序中調(diào)用event.preventDefault()event.stopPropagation() 是很常見的需求读慎。(盡管我們可以在方法中輕松實現(xiàn)這點,但更好的方式是:方法只有純粹的數(shù)據(jù)邏輯槐雾,而不是去處理DOM事件細節(jié)夭委。
為了解決這個問題,Vue.js為v-on提供了事件修飾符募强。修飾符是由點開頭的指令后綴來表示的株灸。

  • .stop 阻止事件繼續(xù)向下傳遞
  • .prevent 提交事件不在重載頁面
  • .capture 當(dāng)元素發(fā)生冒泡時,先觸發(fā)帶有該修飾符的元素
  • .self 跳過冒泡事件和捕獲事件擎值,只有直接作用在該元素上的事件才可以執(zhí)行慌烧。
  • .once 只執(zhí)行一次
  • .passive
<!-- 阻止單擊事件繼續(xù)傳播 -->
<a v-on:click.stop="doThis"></a>

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

<!-- 修飾符可以串聯(lián) -->
<a v-on:click.stop.prevent="doThat"></a>

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

<!-- 添加事件監(jiān)聽器時使用事件捕獲模式 -->
<!-- 即內(nèi)部元素觸發(fā)的事件先在此處理,然后才交由內(nèi)部元素進行處理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只當(dāng)在 event.target 是當(dāng)前元素自身時觸發(fā)處理函數(shù) -->
<!-- 即事件不是從內(nèi)部元素觸發(fā)的 -->
<div v-on:click.self="doThat">...</div>

使用修飾符時幅恋,順序很重要杏死,相應(yīng)的代碼會以同樣的順序產(chǎn)生。因此捆交,用v-on:click.prevent.self會阻止所有的點擊淑翼,而v-on:click.self.prevent 只會阻止對元素自身的點擊。

Vue還對應(yīng)addEventListener中的 passive選項提供了 .passive修飾符品追。

<!-- 滾動事件的默認行為 (即滾動行為) 將會立即觸發(fā) -->
<!-- 而不會等待 `onScroll` 完成  -->
<!-- 這其中包含 `event.preventDefault()` 的情況 -->
<div v-on:scroll.passive="onScroll">...</div>

這個.passive修飾符尤其能夠提升移動端的性能玄括。

\color{red}{注意:}不要把.passive.prevent一起使用,因為.prevent將會被忽略肉瓦,而且瀏覽器可能會有一個警告遭京。請記住:.passive會告訴瀏覽器你 不想阻止事件的默認行為泞莉。

按鍵修飾符


在監(jiān)聽鍵盤事件時哪雕,經(jīng)常需要檢查詳細的按鍵。Vue允許為v-on在監(jiān)聽鍵盤事件時添加按鍵的修飾符:

<!-- 只有在 `key` 是 `Enter` 時調(diào)用 `vm.submit()` -->
<input v-on:keyup.enter="submit">

你可以直接將keyboardEvent.key暴露的任意有效按鍵名轉(zhuǎn)換為kebab-case來作為修飾符鲫趁。

<input v-on:keyup.page-down="onPageDown">

在上述示例中斯嚎、處理函數(shù)只會在$event.key等于PageDown時被調(diào)用。

按鍵碼

keycode的事件用法\color{green}{已經(jīng)被廢棄了}并可能不會被最新的瀏覽器支持挨厚。
使用keycode屬性也是允許的:

<input v-on:keyup.13="submit">

為了在必要的情況下支持就瀏覽器堡僻,Vue提供了絕大多數(shù)常用的按鍵碼別名:

  • .enter
  • .tab
  • .delete (捕獲刪除退格鍵)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

有一些按鍵(.esc以及所有的方向鍵)在IE9中有所不同的key值,如果你想支持IE9疫剃,這些內(nèi)置別名應(yīng)該是首選钉疫。

你還可以通過全局config.keycodes對象自定義按鍵修飾符別名:

// 可以使用 `v-on:keyup.f1`
Vue.config.keyCodes.f1 = 112

系統(tǒng)修飾鍵


2.1.0新增

可以用如下修飾符來實現(xiàn)僅在按下相應(yīng)按鍵時才觸發(fā)鼠標或者鍵盤事件的監(jiān)聽器。

  • .ctrl
  • .alt
  • .shift
  • .meta

例如:

<!-- Alt + C -->
<input v-on:keyup.alt.67="clear">

<!-- Ctrl + Click -->
<div v-on:click.ctrl="doSomething">Do something</div>

請注意修飾鍵與常規(guī)鍵不同巢价,在和keyup事件一起用時牲阁,事件觸發(fā)時修飾鍵必須處于按下狀態(tài)固阁。換句話說,只有在按住ctrl的情況下釋放其他按鍵咨油,才能觸發(fā)keyup.ctrl您炉。而單單釋放ctrl也不會觸發(fā)事件。如果你想要這樣的行為役电,請為ctrl換用keycode:keyup.17赚爵。

.exact修飾符

.exact修飾符允許你控制由精確的系統(tǒng)修飾符組合觸發(fā)的事件。

<!-- 即使 Alt 或 Shift 被一同按下時也會觸發(fā) -->
<button v-on:click.ctrl="onClick">A</button>

<!-- 有且只有 Ctrl 被按下的時候才觸發(fā) -->
<button v-on:click.ctrl.exact="onCtrlClick">A</button>

<!-- 沒有任何系統(tǒng)修飾符被按下的時候才觸發(fā) -->
<button v-on:click.exact="onClick">A</button>
鼠標按鍵修飾符
  • .left
  • .right
  • .middle
    這些修飾符會限制處理函數(shù)僅響應(yīng)特定的鼠標按鈕法瑟。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冀膝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子霎挟,更是在濱河造成了極大的恐慌窝剖,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酥夭,死亡現(xiàn)場離奇詭異赐纱,居然都是意外死亡,警方通過查閱死者的電腦和手機熬北,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門疙描,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讶隐,你說我怎么就攤上這事起胰。” “怎么了巫延?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵效五,是天一觀的道長。 經(jīng)常有香客問我炉峰,道長畏妖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任疼阔,我火速辦了婚禮瓜客,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竿开。我一直安慰自己,他們只是感情好玻熙,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布否彩。 她就那樣靜靜地躺著,像睡著了一般嗦随。 火紅的嫁衣襯著肌膚如雪列荔。 梳的紋絲不亂的頭發(fā)上敬尺,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音贴浙,去河邊找鬼砂吞。 笑死,一個胖子當(dāng)著我的面吹牛崎溃,可吹牛的內(nèi)容都是我干的蜻直。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼袁串,長吁一口氣:“原來是場噩夢啊……” “哼概而!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起囱修,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赎瑰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后破镰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體餐曼,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年鲜漩,在試婚紗的時候發(fā)現(xiàn)自己被綠了源譬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡宇整,死狀恐怖瓶佳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳞青,我是刑警寧澤霸饲,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站臂拓,受9級特大地震影響厚脉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜胶惰,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一傻工、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孵滞,春花似錦中捆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匿级,卻和暖如春蟋滴,著一層夾襖步出監(jiān)牢的瞬間染厅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工津函, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肖粮,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓尔苦,卻偏偏與公主長得像涩馆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蕉堰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Vue事件處理 監(jiān)聽事件 可以用v-on 指令監(jiān)聽 DOM 事件凌净,并在觸發(fā)時運行一些 JavaScript 代碼。...
    凌楓_c475閱讀 161評論 0 0
  • 2019年4月15日 一.開場白 同學(xué)們你們好屋讶,又見面了冰寻。今天我們要講講Vue的事件處理器,從今天開始到之后的時間...
    左冷禪閱讀 442評論 0 0
  • 監(jiān)聽事件 可以用 v-on 指令監(jiān)聽 DOM 事件皿渗,并在觸發(fā)時運行一些 JavaScript 代碼斩芭。 效果: 事件...
    Program_黑閱讀 1,179評論 2 7
  • 1. 事件綁定 v-on v-on:事件名=“執(zhí)行內(nèi)容” v-on:click=“num=1”簡寫方法: @事件名...
    Daeeman閱讀 430評論 1 1
  • 事件監(jiān)聽 v-on:click = "執(zhí)行的js語句或者函數(shù)" 獲取原始Dom事件v-on:click="warn...
    尼莫nemo閱讀 182評論 0 0