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中绑定事件以及如何阻止一些常见的事件,如果上述有什么错误的地方还请大家指出~谢谢大家的支持

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

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