[Vue] Vue指令-事件觸發
相關連結
- 事件處理 | Official
- HTML DOM Events | w3schools
- Event reference | MDN
- HTML DOM Event Objects | w3schools
v-on
我們使用v-on
指令來指定觸發我們在methods
內所撰寫的函式,基本使用方法為v-on:click="functionName"
。
如果不需帶入參數,則可以不用加入小括號,一樣可以執行。有加入參數的需求再加上小括號即可。
縮寫
因為v-on的使用頻率很高,所以vue有提供縮寫的形式。
e.g:v-on:click="functionName"
可以縮寫為@click="functionName"
- html(#app)
- vue
- CSS
<div id="app">
<div class="p-5">
<h3>觸發事件 與 縮寫*</h3>
<div class="box" :class="{ rotate: isTransform }"></div>
<button class="btn btn-outline-primary" v-on:click="changeClass">選轉物件</button>
<br>
<h3>帶入參數*</h3>
<div class="box" :class="{ rotate: isTransform }"></div>
<button class="btn btn-outline-primary" @click="change('isTransform')">選轉物件</button>
<h3>原生 DOM 事件*</h3>
<!-- https://developer.mozilla.org/en-US/docs/Web/Events -->
<h4>input change 事件</h4>
<input type="text" @change="onChange">
<br><br>
<h4>form submit 事件</h4>
<form @submit.prevent="submitForm">
<input type="text" v-model="name">
<button>送出表單</button>
</form>
<h3>動態事件 []</h3>
<input type="text" @[event]="dynamicEvent">
<input type="text" v-model="event">
<h3>動態物件方法 {}</h3>
<!-- 此方法無法傳入參數 -->
<button class="box" v-on="{
mousedown:down,
mouseup:up
}">
</button>
</div>
</div>
const App = {
data() {
return {
name: '小明',
isTransform: true,
num: 10,
event: 'click'
}
},
methods: {
changeClass() {
this.isTransform = !this.isTransform;
},
change(key) {
this[key] = !this[key];
},
onChange(evt) {
console.log(evt)
},
submitForm() {
console.log('表單已送出', `name 為 ${this.name}`)
},
dynamicEvent() {
console.log('這是一個動態事件', this.event)
},
down() {
console.log('按下');
},
up() {
console.log('放開');
},
}
};
Vue.createApp(App).mount('#app');
.box {
background-color: var(--bs-light);
border: 1px solid var(--bs-gray);
width: 80px;
height: 80px;
}
.box {
transition: all .5s;
}
.box.rotate {
transform: rotate(45deg)
}
基礎語法
v-on可以帶入DOM事件(W3C 參考資料)
如不需帶入參數,以click事件為範例:v-on:click="functionName"
,可縮寫為@click="functionName"
。
如需帶入參數:@click="functionName(params)
form上的submit事件
如 Line:17 ,我們可以在fomr上面綁定一個@submit
事件,並且指定當事件觸發時要執行的函式。
如此一來,我們就不用受限於只能點選<button type="submit">送出按鈕</button>
才能將表單送出。
這邊使用prevent修飾符,來取消掉送出表單時預設的跳轉行為
動態綁定事件語法
與動態綁定class類似,如 Line:23 (對應vue data內的event變數),我們可以透過綁定v-model的input去動態修改event變數的內容,來決定我們要透過哪種方式觸發事件。
語法為@[儲存事件方法的變數]="functionName"
。
雖然實戰上比較少使用到動態綁定事件...