更新時(shí)間:2021-12-03 08:57:08 來源:動(dòng)力節(jié)點(diǎn) 瀏覽956次
我們可以使用v-on指令來監(jiān)聽 DOM 事件并在它們被觸發(fā)時(shí)運(yùn)行一些 JavaScript。
例如:
<div id="example-1">
<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
}
})
結(jié)果:
但是,許多事件處理程序的邏輯會更復(fù)雜,因此將 JavaScript 保留在v-on屬性值中是不可行的。這就是為什么v-on也可以接受您想要調(diào)用的方法的名稱。
例如:
<div id="example-2">
<!-- `greet` is the name of a method defined below -->
<button v-on:click="greet">Greet</button>
</div>
var example2 = new Vue({
el: '#example-2',
data: {
name: 'Vue.js'
},
// define methods under the `methods` object
methods: {
greet: function (event) {
// `this` inside methods points to the Vue instance
alert('Hello ' + this.name + '!')
// `event` is the native DOM event
if (event) {
alert(event.target.tagName)
}
}
}
})
// you can invoke methods in JavaScript too
example2.greet() // => 'Hello Vue.js!'
結(jié)果:
除了直接綁定到方法名稱之外,我們還可以在內(nèi)聯(lián) JavaScript 語句中使用方法:
<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)
}
}
})
結(jié)果:
有時(shí)我們還需要在內(nèi)聯(lián)語句處理程序中訪問原始 DOM 事件。您可以使用特殊$event變量將其傳遞給方法:
<button v-on:click="warn('Form cannot be submitted yet.', $event)">
Submit
</button>
// ...
methods: {
warn: function (message, event) {
// now we have access to the native event
if (event) {
event.preventDefault()
}
alert(message)
}
}
調(diào)用event.preventDefault()或event.stopPropagation()事件處理程序內(nèi)部是非常常見的需求。雖然我們可以在方法內(nèi)部輕松做到這一點(diǎn),但如果方法可以純粹是關(guān)于數(shù)據(jù)邏輯而不是必須處理 DOM 事件細(xì)節(jié),那就更好了。
為了解決這個(gè)問題,Vue公司提供事件修飾符的v-on。回想一下,修飾符是由點(diǎn)表示的指令后綴。
.stop
.prevent
.capture
.self
.once
.passive
<!-- the click event's propagation will be stopped -->
<a v-on:click.stop="doThis"></a>
<!-- the submit event will no longer reload the page -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- modifiers can be chained -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- just the modifier -->
<form v-on:submit.prevent></form>
<!-- use capture mode when adding the event listener -->
<!-- i.e. an event targeting an inner element is handled here before being handled by that element -->
<div v-on:click.capture="doThis">...</div>
<!-- only trigger handler if event.target is the element itself -->
<!-- i.e. not from a child element -->
<div v-on:click.self="doThat">...</div>
使用修飾符時(shí)順序很重要,因?yàn)橄嚓P(guān)代碼是以相同的順序生成的。因此 usingv-on:click.prevent.self將阻止所有點(diǎn)擊,而v-on:click.self.prevent只會阻止點(diǎn)擊元素本身。
在監(jiān)聽鍵盤事件時(shí),我們經(jīng)常需要檢查特定的鍵。Vue 允許v-on在監(jiān)聽按鍵事件時(shí)添加按鍵修飾符:
<!-- only call `vm.submit()` when the `key` is `Enter` -->
<input v-on:keyup.enter="submit">
您可以KeyboardEvent.key通過將它們轉(zhuǎn)換為 kebab-case來直接使用通過修飾符公開的任何有效鍵名。
<input v-on:keyup.page-down="onPageDown">
在上面的例子中,只有在$event.key等于時(shí)才會調(diào)用處理程序'PageDown'。如果您想了解更多相關(guān)知識,不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Vue.js視頻教程,課程內(nèi)容詳細(xì),通俗易懂,適合小白學(xué)習(xí),希望對大家能夠有所幫助。
初級 202925
初級 203221
初級 202629
初級 203743