Vue 事件处理器与修饰符

前面的话

在前面的一篇“Vue模板语法”文章中,已经引入了Vue事件处理的概念v-on与修饰符。在事件绑定上, 类似原生js的onclick等写法,也是在HTML上进行监听的。这篇文章讲介绍v-on指令与修饰符

v-on

监听一个按钮的点击事件,设置一个计数器,每次点击都加一:

<div id="app">
        <!-- 等价于 v-on:click="count++" -->
        {{count}}
        <button @click="count++">点击加一</button>
</div>
<script>
	new Vue({
        el: '#app',
        data: {
            count: 0
        }
    })
</script>

在这里插入图片描述

@click的表达式可以直接使用Js语句,也可以在一个Vue实例中methods选项内的函数名,比如对上例进行扩展 再增加一个按钮,点击一次加10

<div id="app1">
        点击次数:{{count}}
        <button @click="handleAdd()"></button>
        <button @click="handleAdd(10)"></button>
    </div>
  <script>
  new Vue({
        el: "#app1",
        data: {
            count:0
        },
       methods:  {
            handleAdd: function(num) {
                num = num || 1;
                this.count += count;
            }
        }
    })
</script> 

@click调用的方法名后可以不跟括号.此时,如果该方法有参数,默认会将原生事件对象event传入。
在这里插入图片描述

这种在HTML元素上监听事件的设计看似将DOM与Js紧耦合,违背分离的原理,是刚好相反。因为通过HTML就可以知道调用的是哪个方法,将逻辑与DOM解耦,便于维护。最重要的是,当模板销毁时,所有事件处理器都会自动删除,无需自己清理。

Vue提供了一个特殊的变量$event,用于访问原生DOM事件。
例如:

<div id="app2>
 	<a href="http://www.baidu.com" @click="handleClick('禁止打开',$event)">打开链接</a>
</div>
<script>
new Vue({
        el: '#app2',
        methods: {
            handleClick: function (message, event) {
                event.preventDefault();
                window.alert(massage);
            }
        }
    })
</script>
修饰符

在上例使用的event.preventDefault()也可以用Vue事件的修饰符来实现,在@绑定的事件后加小圆点“.”在跟一个后缀来使用修饰符。Vue支持一下修饰符。

    .stop
    .prevent
    .capture
    .self
    .once

具体用法:

    <!-- 阻止点击事件冒泡: -->
    <a @click.stop="handle"></a>
    <!-- 提交事件不再重载页面 -->
    <form @submit.prevent="handle"></form>
    <!-- 修饰符可以串联 -->
    <a @click.stop.event="handle"></a>
    <!-- 只有修饰符 -->
    <form @submit.prevent></form>
    <!-- 添加事件侦听器时使用事件捕获模式 -->
    <div @click.capture="handle">...</div>
    <!-- 只当事件在该元素本身触发时触发回调 -->
    <div @click.self="handle">...</div>
    <!-- 只触发一次,组件同样适用 -->
    <div @click.once="handle">...</div>

在表单元素上监听键盘事件式,还可以使用按键修饰符
比如: 按下具体某个键时才调用方法

<!-- 只有在keyCode是13时调用submit() -->
 <input type="text" @keyup.13='submit'>

除了某个keyCode外,Vue还提供了一些快捷名称,以下是全部的别名:
.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right
.alt
.shift
.meta

实例:

   <p><!-- Alt + c--></p>
     <input type="text" @keyup.alt.67="clear">
     
   <p><!-- Ctrl + click --></p>
   <div @click.ctl='doSomething'> Do something</div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值