Bootstrap

Vue2中的事件处理

事件处理

  • 事件处理方法
  • 事件修饰符
  • 按键修饰符
  • 属性绑定
  • 样式绑定

事件处理方法

所用指令:v-on:事件类型="事件名称“
缩写:@事件类型=“事件名称”

-----示例-----
v-on:click="show"//绑定点击事件
@click="show"

下方示例所需要的vue对象
⭐新增methods属性,里边是放函数方法的

var vm=new Vue({
        el:'#app',
        data:{
            num:0
        },
        methods:{
        }
    })

普通函数

可带括号,也可省略,简写将v-on:改为@

<div id="app">
        <h1 v-text="num"></h1>
        <button v-on:click="show">事件1</button>
        <button v-on:click="show()">事件2</button>
        <button v-on:click="num--">事件3</button>
        <button @click="show">事件简写</button>
</div>

method中

 show:function(){
                console.log(this);
                this.num++;
            }
效果图

在这里插入图片描述

带参函数

<div id="app">
<h2>带参函数</h2>
<button @click="add(1,6)">Add</button>
</div>

method中

add:function(a,b){
                this.num=a+b;
                console.log(event.target);//事件源
            }
效果图

当多个按钮绑定相同的事件

<div id="app">
<h2>当多个按钮绑定相同的事件</h2>
        <button @click="hello">One</button>
        <button @click="hello">Two</button>
        <button @click="hello">Three</button>
</div>

methods中

hello:function(event){
                //hello不写括号,带参不带参默认都有个event参数
                console.log(event.target);  //事件源
            }
效果图

在这里插入图片描述
点击不同的按钮控制台打印对应的标签

不写括号,带参不带参默认都有个event参数
event.target获取事件源


事件修饰符

语法:事件后加上修饰符(例如:@click.stop)

修饰符名称作用
.stop阻止冒泡
.prevent阻止默认行为
.capture添加事件监听器时使用事件捕获模式–>即内部元素触发的事件先在此处理,然后才交由内部元素进行处理
.self只当在 event.target 是当前元素自身时触发处理函数->即事件不是从内部元素触发的
.once只执行一次
.passive滚动事件的默认行为 (即滚动行为) 将会立即触发 --> 而不会等待 onScroll 完成 --> 这其中包含 event.preventDefault()的情况

官方文档:https://cn.vuejs.org/v2/guide/events.html#%事件修饰符

测试

<div id="app">
        <div @click="show('')">
            父盒子
            <div @click.stop="show('')">子盒子</div>
        </div>
        <h2>利用冒泡得到点击的按钮</h2>
        <div @click.once="show">
            <button>按钮1</button>
            <button>按钮2</button>
            <button>按钮3</button>
        </div>
        <h2>练习2</h2>
        <a v-on:click.prevent="handle" href="https://baidu.com">百度</a>
    </div>
 var vm=new Vue({
        el:'#app',
        data:{
            num:0
        },
        methods:{
            show:function(msg){
                console.log(msg);
                console.log(event.target);
            },
            handle:function(){
                alert("点了连接");
                // event.preventDefault();//阻止默认行为.在这里阻止a标签跳转
            }
        }
    })
效果图

在这里插入图片描述
.stop阻止了冒泡
在这里插入图片描述
利用冒泡得到点击的标签,也利用了 .once只能执行一次,再点其他按钮无效
在这里插入图片描述
点了超链接,弹框,但不执行跳转,.prevent阻止了默认行为


按键修饰符

官方文档:https://cn.vuejs.org/v2/guide/events.html#按键修饰符
语法:@ketup.键值 指定按键被松开触发事件

示例

<div id="app">
        <form action="https://baidu.com">
            NAME:<input type="text" v-model="name" /><br/>
            PassWord:<input @keyup.enter="login" type="password" v-model="password" /><br/>
            <input type="button" value="登陆"/>
        </form>
    </div>

keyup.可以是键值也可以是键名

 var vm=new Vue({
        el:'#app',
        data:{
            name:'',
            password:''
        },
        methods:{
            login:function(){
                console.log("去登陆,"+"用户名:"+this.name+"密码:"+this.password);
            }
        }
    })

在这里插入图片描述


自定义键

即将指定的键命名为自己的名字

语法:Vue.config.keyCodes.自定义键名=键
例如

Vue.config.keyCodes.login=13;//将13(回车键)设置为登陆

html中

<div id="app">
        <form action="https://baidu.com">
            NAME:<input type="text" v-model="name" /><br/>
            PassWord:<input @keyup.login="login" type="password" v-model="password" /><br/>
            <input type="button" value="登陆"/>
        </form>
    </div>

js与上方一样,点击回车键照样能执行login方法.
区别在于:键名不同,将回车键重命名为login键…


属性绑定

所用指令:v-bind:属性名="值“
缩写::属性名=“值”

-----示例-----
v-bind:value="碰磕"//绑定属性
:value="碰磕"

示例

 <div id="app">
        <h1>{{url}}</h1>
        <a v-bind:href="url">去百度</a>
        <a :href="url">去百度(缩写:)</a>
    </div>
	var vm=new Vue({
        el:'#app',
        data:{
            url:'https://www.baidu.com'
        }
    })

点击url就能跳转到百度了


练习

点击按钮更换图片

<div id="app">
        <img :src="img[count]" width="50" height="50"/>
        <button @click="huan"></button>
</div>
var vm=new Vue({
        el:'#app',
        data:{
            img:['./img/chunyu01.png','./img/chunyu02.png','./img/chunyu03.png'],
            count:0
        },
        methods:{
            huan:function(){
                if(this.count==this.img.length-1){
                    this.count=0;
                }else{
                    this.count++;
                }
            } 
        }
    })

在这里插入图片描述


不用v-model实现双向绑定

<div id="app">
        <h1>不用v-model双向绑定实现双向绑定</h1>
        <h3>{{stname}}</h3>
        <input type="text" :value="stname" @input="updateval">
    </div>
var vm=new Vue({
        el:'#app',
        data:{
            stname:"碰磕"
        },
        methods:{
            updateval:function(){
                this.stname=event.target.value;
            }
        }
    })

在这里插入图片描述


样式绑定

可以用JSON
也可以用数组
还可以JSON+数组混合

用JSON绑定样式

        .active{
            border: 10px solid green;
        }
        .error{
            width: 200px;
            height: 200px;
            background-color: aquamarine;
        }

上方样式表通用↑

<div id="app">
        <div v-bind:class="{active:isActive,error:isError}">用JSON</div>
        <button @click="qiehuan"></button>
</div>
 var vm=new Vue({
        el:'#app',
        data:{
            isActive:false,   //true表示使用该样式
            isError:true
        },
        //切换样式表
        methods:{
            qiehuan:function(){
                this.isActive=!this.isActive;
                this.isError=!this.isError;
            }
        }
    })

图1在这里插入图片描述
图2在这里插入图片描述


用数组绑定样式

<div id="app">
        <div v-bind:class="[c1,c2]">用数组</div>
        <button @click="szqiehuan"></button>
</div>
 var vm=new Vue({
        el:'#app',
        data:{
            c1:'active',
            c2:'error'
        },
        //切换样式表
        methods:{
           	szqiehuan:function(){
                this.c2=''
            }
        }
    })

效果图差不多,就不展示了,主要需要理解绑定样式的方式


用JSON+数组混合绑定样式

<div id="app">
        <div v-bind:class="[c1,{error:flag}]">用数组JSON混合</div>
</div>
 var vm=new Vue({
        el:'#app',
        data:{
            c1:'active',
            flag:true
        }
    })

样式绑定完结~


Vue事件的练习完结~🤭

;