傳統在寫 JS 或是 jQuery 的時候,要綁定 DOM 來控制,假設要綁定在按鈕上的事件,就要寫成:
1 2 3
|
$('.btn').click(function () { ... });
|
1 2 3
|
$('.btn').on(click, function () { ... })
|
在 vue 中會直接寫在 html 上,並且在 vue 的程式碼中新增一個
methods
方法來對應
v-on
事件,vue 的原始碼中都是用
物件
來呈現資料,所以
methods
也要是物件。
1 2 3 4 5 6 7 8 9 10
|
var vm = new Vue({ el: '#app', data: { text: '', newText: '', }, methods: { ... }, });
|
在
methods
中新增的方法名稱要對應在
v-on
的事件名稱中,登打方式如下方程式碼,並透過
console.log
檢查是否有正確產生事件。
1
|
<button type="button" v-on:click="theNewText">click</button>
|
javascript
1 2 3 4 5 6 7 8 9 10 11 12
|
var vm = new Vue({ el: "#app", data: { text: "", newText: "", }, methods: { theNewText: function () { console.log("you click me"); }, }, });
|
倘若我今天要在
input
輸入文字,並且點擊按鈕產生事件,可以使用
this.text
指向 text 本身。
在 vue 中已經將
this
定義為資料本身。
1 2 3 4 5
|
methods: { theNewText: function () { console.log('this.text'); } },
|
如果要將
input
中輸入的文字輸出到 ,可以這樣寫:
1 2 3 4 5
|
methods: { theNewText: function () { this.newText = this.text; } },
|
按鍵修飾符
,其中一個很好用的就是
enter
,顧名思義就是按下
enter
鍵時,就能把資料送出。
程式碼可以這樣寫:
@keyup.enter="theNewText"
Codepen:
https://codepen.io/hnzxewqw/pen/XWmRvrW
https://codepen.io/hnzxewqw/pen/MWamNyN
https://codepen.io/hnzxewqw/pen/KKdmOmj
https://codepen.io/hnzxewqw/pen/QWjveme
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<div id="app"> <p>lazy 效果: 輸入資料後,離開 input 後才會顯示結果</p> <input type="text" v-model.lazy="msg" /> <div>msg: {{ msg }}</div> </div>
<script> var vm = new Vue({ el: "#app", data: { msg: "hello", }, }); </script>
|
https://codepen.io/hnzxewqw/pen/ZEbKgVO
https://codepen.io/hnzxewqw/pen/BaoRXEe
Vue 官網 - 指令 v-on