vue基础---事件处理
(1)事件监听
v-on
指令监听 DOM 事件,并在触发时运行JS代码
<div class="event_area"> {{message}} <button v-on:click="show_info">按钮</button> </div> <script type="text/javascript"> var event_area = new Vue({ el:".event_area", data:{ message:'展示信息' }, methods:{ show_info:function(){ alert(this.message); } } }) </script>
案例2:计算按钮点击次数
监听事件
<div class="event_area"> 您点击了{{num}}次按钮 <button v-on:click="num++">按钮</button> </div> <script type="text/javascript"> var event_area = new Vue({ el:".event_area", data:{ num:0 } }) </script>
然而许多事件处理逻辑会更为复杂,所以直接把 JavaScript 代码写在 v-on
指令中是不可行的。因此 v-on
还可以接收一个需要调用的方法名称。如下所示,调用add_num方法
解析: `this`在方法里指向当前 Vue 实例
<div class="event_area"> 您点击了{{num}}次按钮 <button v-on:click="add_num">按钮</button> </div> <script type="text/javascript"> var event_area = new Vue({ el:".event_area", data:{ num:0 }, methods:{ add_num:function(){ return this.num++; } } }) </script>
(2)内联处理器中的方法
除了直接绑定到一个方法,也可以在内联 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) } } })
(3)事件修饰符
①表单事件:
<form id="ti_jiao" v-on:submit="onSubmit"> <input type="text"><br /> <input type="submit" value="提交"> </form> <script type="text/javascript"> var ti_jiao = new Vue({ el:"#ti_jiao", methods:{ onSubmit:function(e){ e.preventDefault(); alert("弹框") } } }) </script>
阻止表单默认事件,即数据提交页面刷新。
在事件处理程序中调用 event.preventDefault()
或 event.stopPropagation()
是非常常见的需求。尽管可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。
为了解决这个问题,Vue.js 为 v-on
提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。
.stop
.prevent
.capture
.self
.once
.passive
<!-- 阻止单击事件继续传播 --> <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> <!-- 只当在 event.target 是当前元素自身时触发处理函数 --> <!-- 即事件不是从内部元素触发的 --> <div v-on:click.self="doThat">...</div>
②修饰符顺序
使用修饰符时,顺序很重要;相应代码会以同样的顺序产生。
因此,用 v-on:click.prevent.self
会阻止所有的点击,而 v-on:click.self.prevent
只会阻止对元素自身的点击。
③一次性修饰符
<!-- 点击事件将只会触发一次 -->
<input type="button" name="btn" v-on:click.once="prompt" value="弹框"> methods:{ prompt:function(){ alert("弹框"); } }
结果:点击按钮后,只能弹框一次。
④被动修饰符
Vue 还对应 addEventListener
中的 passive
选项提供了 .passive
修饰符
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 --> <!-- 而不会等待 `onScroll` 完成 --> <!-- 这其中包含 `event.preventDefault()` 的情况 --> <div v-on:scroll.passive="onScroll">...</div>
.passive
修饰符能够有效提升移动端的性能
(4)按键修饰符(待验证)
(5)系统修饰符(待验证)
.