(6)事件

1、vue如何处理事件?

v-on指令用法

        <input type = 'button' v-no:click = 'num++' />

v-on简写形式

<input type = 'button' @click = 'num++' />

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script type="text/javascript" src="vue.min.js"></script>
</head>

<body>
    <div id="app">
        <div>{{num}}</div>
        <div>
        <button v-on:click="num++">点击</button>
        <button @click="num++">点击1</button>
        </div>
    </div>

<script>

    var vm = new Vue({
        el:'#app',
        data:{
            num:0
        }
        })
</script>
</body>

</html>

两个点击事件,点击就会触发num++,但是我们对数据的处理可不止是++这么简单的操作,以后可能会进行一些复杂的操作,那么我们的等号后面就会堆一大坨东西,这样会不利于我们代码的可读性,所以我们vue给提供了事件函数!!

2、事件函数的调用方法

        直接绑定函数名

                <buttno v-on:click='say'>hello</button>

        调用函数

                <buttno v-on:click='say()'>Say hi</button>

    <div id="app">
        <div>{{num}}</div>
        <div>
        <button v-on:click="num++">点击</button>
        <button @click="num++">点击1</button>
        <button @click="handle">点击2</button>
        <button @click="handle()">点击3</button>
        </div>
    </div>


    var vm = new Vue({
        el:'#app',
        data:{
            num:0
        },
        methods:{
            handle:function(){
                // 这里的this是vue的实例对象
                console.log(this===vm);
                this.num++;
            }
        }
        })

要注意,函数必须定义在methods里面!

3、事件函数参数传递

普通参数和事件对象

        <button v-on:click='say("hi",$event)'>say hi</button>

    <div id="app">
        <div>{{num}}</div>
        <div>
        <button @click="handle1">点击1</button>
        <button @click="handle2(123,456,$event)">点击2</button>
        </div>
    </div>
    /*
    事件绑定-参数传递
    1、如果事件直接绑定函数名称,那么默认事件会传递事件对象作为事件函数的第一个参数
    2、如果事件绑定函数调用,那么事件对象必须作为最后一个参数显示传递,并且事件对象的名称必须是$event
    */
    var vm = new Vue({
        el:'#app',
        data:{
            num:0
        },
        methods:{
            handle2:function(p,p1,event){
                console.log(p,p1);
                console.log(event.target.tagName);
                console.log(event.target.innerHTML);
                this.num++;
            },
            handle1:function(event){
                console.log(event.target.innerHTML);
            }
        }
        })

    事件绑定-参数传递

    1、如果事件直接绑定函数名称,那么默认事件会传递事件对象作为事件函数的第一个参数

    2、如果事件绑定函数调用,那么事件对象必须作为最后一个参数显示传递,并且事件对象的名称必须是$event

4、事件修饰符 

.stop阻止冒泡(冒泡就是子元素绑定事件,父元素也绑定事件,当子元素出发事件时,父元素的事件也会触发,我们防止父元素事件触发,就叫组织冒泡)

<a v-on:click.stop="handle">跳转</a>

.prevent阻止默认行为

<a v-on:click.prevent="handle">跳转</a>

<body>
    <div id="app">
        <div>{{num}}</div>
        <div v-on:click="handle0">
        <button @click.stop="handle1">点击1</button>
        </div>
        <div>
            <a href="http://www.baidu.com" v-on:click.prevent="handle2">百度</a>
        </div>
    </div>

<script>
    var vm = new Vue({
        el:'#app',
        data:{
            num:0
        },
        methods:{
            handle0:function(){
                this.num++;
            },
            handle1:function(event){
                //阻止冒泡
                // event.stopPropagation();
            },
            handle2:function(){
                //阻止默认行为
                // event.preventDefault();
            }
        }
        })
</script>
</body>

5、按键修饰符

        .enter 回车键

                <input v-on:keyup.event="submit">

        .delete删除键

                <input v-on:keyup.delete="handle">

    <div id="app">
        <form action="">
            <div>
                用户名:
                <input type="text" v-on:keyup.delete="clearContent" v-model="uname">
            </div>
            <div>
                密码:
                <input type="text" v-on:keyup.enter="handleSubmit" v-model="pwd">
            </div>
            <div>
                <input type="button" v-on:click="handleSubmit" value="提交">
            </div>
        </form>
    </div>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                uname:'',
                pwd:''
            },
            methods:{
                clearContent:function(){
                    //按delete键的时候,清空用户名
                    this.uname = ''
                },
                handleSubmit:function(){
                    console.log(this.uname,this.pwd);
                }
            }
        })
    </script>

6、自定义按键修饰符

        全局config.keyCodes对象

                Vue.config.keyCodes.f1 = 112

<body>
    <div id="app">
        <input type="text" v-on:keyup.aaa="handle" v-model="info">
    </div>
</body>
<script>
    /*
        事件绑定-自定义按键修饰符
        规则:自定义案件修饰符名字时自己定义的,但是对应的值必须是案件队形event.keyCode值
    */
    Vue.config.keyCodes.aaa = 65
    var vm = new Vue({
        el:'#app',
        data:{
            info:''
        },
        methods:{
            handle:function(event){
                console.log(event.keyCode);
            }
        }
    })
</script>

        事件绑定-自定义按键修饰符

        规则:自定义案件修饰符名字时自己定义的,但是对应的值必须是案件队形event.keyCode值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值