Vue.js入门系列(7)--事件绑定

  在前面的章节中,小编为大家分享了在Vue中如何控制html内容、控制属性、绑定样式等基本操作,接下来小编再为大家分享如何在Vue中绑定事件

一、绑定事件

  在Vue中,通过 v-on 指令来绑定事件,绑定事件后具体的操作可以分成以下几种:

1.在事件后接收简单的运算

<div class="warp" >
    <form action="" v-on:click.prevent>
        <button v-on:click="count +=1">数值:{{count}}</button>
    </form>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el:".warp",
        data:{
                count:0
            }
    })
</script>
简单运算.gif

  在这个例子中,每点击一次按钮时,数值就会加1。但是如果我们把所有JavaScript代码都放置在模板中,代码量会很多,不易维护,所以才有了第二种写法

2. 在事件后接收无参数的方法

<div class="warp" >
    <form action="" v-on:click.prevent>
        <button v-on:click="message()"> 按钮</button>
    </form>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el:".warp",
        methods:{
                message:function(){
                        alert("Hello,Vue");
                    }
            }
    })
</script>

接收无参的方法.gif

  在这个例子中,v-on事件后面接收的是一个名字为message()的方法,方法的具体逻辑业务在Vue实例中的methods内部实现。当点击一次按钮,就会跳出内容为“Hello,Vue”的弹出弹出框。
  这种写法相比较第一种写法会更容易维护,更容易理解,但是缺乏了和用户的交互过程,所以有了第三种写法

3.在事件后接收普通参数的方法

<div class="warp" >
    <form action="" v-on:click.prevent>
        <button v-on:click="message('Vue')"> 按钮</button>
    </form>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el:".warp",
        methods:{
                message:function( str){
                        alert(str);
                    }
            }
    })
</script>
接收有参的方法.gif

  在这个例子中,为message方法传递一个Vue的实参,在Vue实例中,用str形参来接收用户输入的实参。当点击一次按钮时,用户输入的Vue字符串就会传递给Vue实例中的str形参,然后弹出str的内容.
  此外,在method内部的方法还可以操作data内部的属性

<div class="warp" >
    <form action="" v-on:click.prevent>
        <button v-on:click="message('Vue')"> 按钮</button>
    </form>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el:".warp",
        data:{
                count:0
        },
        methods:{
                message:function( str){
                        alert(str);
                        alert(this.count);
                    }
            }
    })
</script>

操作data内的属性.gif

  在这个例子中,先弹出了用户输入的参数“Vue”,然后弹出了在data内部的属性count的值,说明在methods内部的方法是可以操作data内部的属性的,要注意的是应该指出属性所属的对象,比如本例中的 this.count。
  如果用户想要访问原生的DOM事件,又该如何实现呢?别急,下面就是小编为大家分享的第四种写法

4.在事件中接受原生事件作为参数的方法

<div class="warp" >
    <form action="" >
        <button v-on:click="warn('Form cannot be submitted yet.', $event)">
              Submit
        </button>
    </form>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el:".warp",
        methods:{
                warn: function (message, event) {
                        // 现在我们可以访问原生事件对象
                        if (event) {
                          event.preventDefault()
                        }
                        alert(message)
                      }
            }
    })
</script>

  在这个例子中,通过$event获取的原生的事件
  在事件的处理程序中,通过调用event.preventDefault()来出路默认提交事件 或 event.stopPropagation()组织冒泡事件是非常常见的需求。尽管可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。而下面事件的修饰符就很好的处理了这点

二、事件的修饰符

  在前面中我们讲过,修饰符是由点开头的指令后缀来表示的。下面是几种常见的事件修饰符

1. .stop:阻止冒泡事件

所谓的冒泡事件就是触发了子级事件的同时,也触发了父级的事件

<div @click="bto">
    <div @click="bto1">冒泡事件</div>
</div>
<script>
    var vm = new Vue({
        el:".warp",
        methods:{
                bto1:function(){
                    console.log("div1");
                },
                bto:function(){
                    console.log("div2");
                }
            }
        }) 
</script>
image.png

  当用户点击第二个div时,在控制台上输出div2,同时也输出了第一个div点击事件的内容div1。这就是冒泡事件,触发子级事件的同时也触发的父级的事件,要想组织冒泡事件,使用“.stop”即可

<div @click="bto">
    <div @click.stop="bto1">冒泡事件</div>
</div>
<script>
    var vm = new Vue({
        el:".warp",
        methods:{
                bto1:function(){
                    console.log("div1");
                },
                bto:function(){
                    console.log("div2");
                }
            }
        }) 
</script>
image.png

仅仅输出了触发第二个div所相应的内容

2. .prevent:阻止默认提交事件-

  默认事件一般发生在form表单和a标签两者,form表单会自动提交,a标签会自动跳转,通俗的理解就是点击一次就会刷新一次页面。想要阻止默认事件,使用“.prevent”即可

<a href="" @click.prevent="stopclick">阻止默认事件</a>

3. .once:只执行一次

<div class="warp" >
    <form action="" v-on:click.prevent>
        <button v-on:click.once="count +=1">数值:{{count}}</button>
    </form>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el:".warp",
        data:{
                count:0
            }
    })
</script>
once事件修饰符.gif

4. .capture :先执行父级在执行子级

<div v-on:click.capture='alert("1")' style="width: 100%;height: 45px;background-color: black;">
    <div v-on:click="alert('2')" style='width: 80%;margin-left: 10%;background-color: white;'>
            123
    </div>
</div>

capture时间修饰符.gif

  在这个例子中,当点击白色区域时,会先弹出1再弹出2,说明在执行顺序上,使用了 .capture事件修饰符的元素会先执行父级元素,再执行子级元素

5. .self:只执行子级本身的函数

<div v-on:click.self='alert("1")' style="width: 100%;height: 45px;background-color: black;">
    <div v-on:click="alert('2')" style='width: 80%;margin-left: 10%;background-color: white;'>
        123
    </div>
</div>

slef事件修饰符.gif

  在本例子中,当点击了黑色区域,只是弹出了2而没有弹出1,说明在使用了 .self事件修饰符的元素中,只会执行子级本身的函数而不会执行父级的函数
  以上就是几个常用的事件修饰符:** .stop .prevent .once .capture .slef**
  综上所述,本次小编主要为大家分享了如何在Vue中绑定事件以及如何阻止一些常见的事件,如果上述有什么错误的地方还请大家指出~谢谢大家的支持

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 找到营销的破局点 随着互联网红利的消失,只要你是个市场人或者品牌人,都能非常深刻地感受到市场营销的艰难,尤其体味到...
    魔都晶姐阅读 248评论 0 1
  • 阳光茉莉tr阅读 325评论 0 0
  • 最近在看军事联盟司马懿,之前的知识一直觉得是司马懿教曹丕害了曹植,认为司马懿就是个坏人,何况还有司马昭之心 路人皆...
    百事可爱哟阅读 109评论 0 1
  • 我看见一棵开花的树, 那红的蔷薇美的窒息。 每一个走过的人都向它投来爱慕。 我看到了棕树的叶子和枫树的枝条, 那一...
    麓走私念阅读 270评论 0 6