陈广安个人网站
会写代码的咸鱼
陈广安个人网站阿里云盘资源
陈广安个人网站网盘资源搜索
“ 梦想还是要有的,万一实现了呢!”
— 马云

vue事件绑定和属性

创建时间:2017-11-23

vue事件

v-on

用来绑定事件,用法:v-on:事件 = “函数”

标准写法 v-on:click="show()"

简写 @click="show()"


事件对象$event

包含事件相关信息,如事件源、事件类型、偏移量

target、type、offsetx

<div class='box'>
    <button @click="print($event)">事件对象</button>
</div>
<script src='__STATIC__/vendor/vue/vue.min.js'></script>
<script>
    var app = new Vue({
        el: '.box',
        data: {

        },
        methods: {
            print(e){
                //输出事件对象
                console.log(e);
                //获取DOM对象
                console.log(e.target);
                //获取事件类型
                console.log(e.type);
            }
        }
    })
</script>


事件冒泡

阻止事件冒泡

1、原生js方式,依赖于事件对象

<div class='box'>
    <div @click="showA()">
        <div @click="showB()">
            <button @click="showC($event)">点我</button>
        </div>
    </div>
</div>
<script src='__STATIC__/vendor/vue/vue.min.js'></script>
<script>
    var app = new Vue({
        el: '.box',
        data: {

        },
        methods: {
            showC(e){
                console.log("a");
                //原生js阻止事件冒泡
                e.stopPropagation();
            },
            showB(){
                console.log("b");
            },
            showA(){
                console.log("c");
            }
        }
    })
</script>


2、vue方式,不依赖于事件对象

事件后面传递修饰符,如阻止冒泡:@click.stop="fun()"

<div class='box'>
    <div @click="showA()">
        <div @click="showB()">
            <button @click.stop="showC()">点我</button>
        </div>
    </div>
</div>
<script src='__STATIC__/vendor/vue/vue.min.js'></script>
<script>
    var app = new Vue({
        el: '.box',
        data: {

        },
        methods: {
            showC(){
                console.log("a");;
            },
            showB(){
                console.log("b");
            },
            showA(){
                console.log("c");
            }
        }
    })
</script>


事件默认行为

阻止默认行为

默认行为,如a标签,会进行跳转,通过阻止默认行为,来阻止跳转

1、原生js方式,调用事件对象

<div class='box'>
    <a href="#" @click="fun($event)">链接</a>
</div>
<script src='__STATIC__/vendor/vue/vue.min.js'></script>
<script>
    var app = new Vue({
        el: '.box',
        data: {

        },
        methods: {
            fun(e){
                console.log("a");
                //阻止默认行为
                e.preventDefault(); 
            }
        }
    })
</script>


2、vue方式,通过修饰符来阻止

<div class='box'>
    <a href="#" @click.prevent="fun()">链接</a>
</div>
<script src='__STATIC__/vendor/vue/vue.min.js'></script>
<script>
    var app = new Vue({
        el: '.box',
        data: {

        },
        methods: {
            fun(){
                console.log("a");
            }
        }
    })
</script>


键盘事件

1、原生js写法

<div class='box'>
    用户名:<input type="text" @keydown="fun($event)">
</div>
<script src='__STATIC__/vendor/vue/vue.min.js'></script>
<script>
    var app = new Vue({
        el: '.box',
        data: {

        },
        methods: {
            fun(e){
                console.log(e.keyCode);
                if(e.keyCode==13){
                    console.log("你按了回车");
                }
            }
        }
    })
</script>


2、vue方式,类似于修饰符

<div class='box'>
    <!-- 通过键码绑定事件 -->
    <p>用户名:<input type="text" @keydown.38="up()"></p>

    <!-- 通过键码 别名 绑定事件,不是所有键码都有别名,如a,b,c...-->
     <!-- 也想要想要达到 别名 效果,需要自定义键码别名 -->
    <p>用户名:<input type="text" @keydown.enter="en()"></p>
</div>
<script src='__STATIC__/vendor/vue/vue.min.js'></script>
<script>
    var app = new Vue({
        el: '.box',
        data: {

        },
        methods: {
            up(){
                console.log("你按了向上箭头");
            },
            en(){
                console.log("你按了回车"); 
            }
        }
    })
</script>


自定义键码别名

<div class='box'>
    <p>用户名:<input type="text" @keydown.v="v()"></p>
    <p>用户名:<input type="text" @keydown.w="w()"></p>
</div>
<script src='__STATIC__/vendor/vue/vue.min.js'></script>
<script>
    // 自定义键码别名
    Vue.config.keyCodes = {
        // 别名:键码
        v: 86,
        w: 87,
    }

    var app = new Vue({
        el: '.box',
        data: {

        },
        methods: {
            v(){
                console.log("你按了v");
            },
            w(){
                console.log("你按了w"); 
            }
        }
    })
</script>




v-bind

用于属性的绑定 ,如 src属性  style属性  class属性等等

写法:v-bind:属性=“”

标准写法: v-bind:src="url"  

简写::src=“url

<style>
    .div-1{background: rgb(243, 215, 215);margin: 10px;width:100px;height:100px;float:left;}
    .div-2{color: #fff;background: rgb(36, 26, 26);}
</style>
<div class='box'>
    <!-- 可以直接访问data里面的数据,不需要{{}} -->

    <!-- 标准写法 -->
    <div v-bind:class="cssNameA">标准写法</div>

    <!-- 简写 写法 -->
    <div :class="cssNameA">简写 写法</div>

    <!-- 绑定对象 -->
    <div :class="cssNameA" :style="styleObj">绑定对象数据</div>

    <!-- 通过数组形式, 绑定多个class -->
    <div :class="[cssNameA,cssNameB]">通过数组形式,绑定多个class</div>

    <!-- JSON形式,绑定多个class,如果样式名称带“-”一定要用引号引起来 如'div-1':true-->
    <div :class="{'div-1':true,'div-2':true}">JSON形式,绑定多个class,true表示生效</div>


    <!-- 条件判断 bool值-->
    <div :class="{'div-1':isOk}">条件判断 bool值</div>

    <!-- 条件判断 三元运算符-->
    <div :class="isOk?cssNameA:cssNameB">条件判断 三元运算符</div>
</div>
<script src='/static/vendor/vue/vue.min.js'></script>
<script>
    new Vue({
        el:'.box',
        //存储数据
        data: {
            cssNameA:'div-1',
            cssNameB:'div-2',
            styleObj:{
                width:"200px",
                height:"200px"
            },
            isOk:true
            
        },
        //存储方法
        methods: {

        }
    })
</script>