zoukankan      html  css  js  c++  java
  • VUE学习笔记--事件绑定

    Vue 提供了 v-on 指令来监听 DOM 事件,在事件绑定上,类似原生 JavaScript 的 onclick 事件写法,也是在 HTML 上进行监听。
    
    Vue 中的事件绑定,语法规则:
    v-on :事件名.修饰符=方法名()│方法名|简单的JS表达式
    简写:@事件名.修饰符=方法名()|方法名|简单的JS表达式
    事件名: click | keydown | keyup/mouseover|mouseout|自定义事件名
    直接使用:直接在标签中书写 js 方法:
    <div id="app ">
            点击次数{ { count } }
            <button @click="count++">点击+1</button>
    </div>
    <script type="text/javascript">
               var vm=new vue ( {
                     el: '#app ' ,
                     data : {
                             count : 0
                        }
                })
    </ script>
    2.调用 methods 的办法
    通过 v-on 绑定实例选项属性 methods 中的方法作为事件的处理器
    <!DOCTYPE html>
    <html xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <meta charset="utf-8"/>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <button @click="say">点击</button>
    </div>
    <script type="text/javascript">
        var vm= new Vue({
            el: '#app',
            data:{
                msg:'Say Hello'
            },
            methods:{
                say: function () {
                    alert(this.msg)
                }
            }
        })
    </script>
    </body>
    </html>
    方法传参,方法直接在调用时在方法内传入参数,代码如下:
    <div id="app">
            button @click="say ( 'Hello beixi')">点击</button>
            </div>
    <script type="text/javascript">
            var vm=new vue ( {
                  el: '#app ',
                  data : {
                       msg: 'say Hello'
           
     },
            methods: {
                say: function (val){
                    alert (val)
                }
            }
        })
    </script>
    传入事件对象,代码如下:
    <div id="app">
            <button data-aid='123' @click="eventFn ($event)">事件对象</button>
    </div>
    <script type="text/javascript">
            var vm= new vue ( {
                el : '#app ' ,
                methods : {
                    eventFn : function (e) {
                        console.log (e) ;
                        //e.srcElement    dom节点
                        e.srcElement.style.background='red ' ;
                        console.log (e.srcElement.dataset.aid);/*获取自定义属性的值*/
                    }
                }
            })
    </script>
    修饰符 
    Vue 为指令 v-on 提供了多个修饰符,方便我们处理一些 DOM 事件的细节,Vue 主要的 修饰符如下:
     .top:阻止事件继续传播,即阻止它的捕获和冒泡过程
    
    @click.stop='handle()' //只要在事件后面加 .stop 就可以阻止事件冒泡
    点击内部点击,阻止了冒泡过程,即只执行 inner 这个方法,如果不加.stop, 先执行 inner 方法,后执行 outer 方法。即通过了冒泡这个过程。
    <!DOCTYPE html>
    <html xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <meta charset="utf-8"/>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    <body>
    <div id="app">
        <div style="background-color: aqua; 100px;height: 100px" v-on:click="outer">
            外部点击
            <div style="background-color: red; 50px;height: 50px"  v-on:click.stop="inner">内部点击</div>
        </div>
    </div>
    <script type="text/javascript">
        var vm= new Vue({
            el: '#app',
            methods:{
                outer: function () {
                    console.log("外部点击")
                },
                inner: function () {
                    console.log("内部点击")
                }
            }
        })
    </script>
    </body>
    </html>

    .prevent:阻止默认事件,代码如下:
    @click.prevent='handle()' //只要在事件后面加 .prevent 就可以阻止默认事件。
    如下阻止了 a 标签的默认刷新:
    <a href="" v-on:click.prevent>点击</a>
    
    .capture:添加事件监听器时使用事件捕获模式,即在捕获模式下触发,代码如下:
    @click.capture='handle()'
    
    如下实例在点击最里层的点击 6 时,outer 方法先执行,因为 outer 方法在捕获模式执行 的,先与冒泡事件。下列执行顺序 outer->set->inner,因为后俩个还是冒泡模式下触发的事 件,代码如下:
    <div v-on : click.capture="outer">外部点击5
        <div v-on : click="inner">内部点击5
            <div v-on: click="set">点击6</div>
        </div>
    </div>
    .self:当前元素自身时触发处理函数时才会触发函数。 
    原理是根据 event.target 确定是否当前元素本身,来决定是否触发的事件/函数 。 
    如下示例,如果敲击内部点击,冒泡不会执行 outer 方法,因为 event.target 指的是内部 点击的 dom 元素,不是外部点击的,所以不会触发自己的点击事件,代码如下:
    <div v-on :click.self="outer">
       外部点击
        <div v-on: click="inner">内部点击</div>
    </ div>
    
    .once:只触发一次,代码如下:
    <div id="app">
            <div v-on : click.once="once">点击once</div>
    </div>
    <script type="text/javascript">
        var vm= new vue ( {
        el:  '#app' ,
        methods : {
            once: function () {
                console.log("点击once" )
            }
        }
    })
    </script>       
    键盘事件 
    方式一:@keydown='show($event)'
    <div id="app">
            <input type="text" @keydown='show ($event) 'l>
        </div>
        <script type="text/javascript">
            var vm= new vue ( {
            el: '#app ' ,
            methods : {
                show : function (ev){
                  
      /*在函数中获ev.keycode */
                    console.log (ev.keycode) ;
                    if (ev.keycode==13) {
                        alert ('你按了回车键!')
                    }
                }
            }
        })
        </script>
    方式二:
    <input type="text" @keyup.enter="show ( ) ">//回车执行
    <input type="text" @keydown. up= 'show () '>//上键执行
    <input type="text" @keydown.down='show()' >//下键执行
    <input type="text" @keydown.left='show ()' > //左键执行
    <input type="text" @keydown.right='show ( ) '>//右键执行
    <!DOCTYPE html>
    <html xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <meta charset="utf-8"/>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <!--引入bootstrap-->
        <link rel="stylesheet" href="./lib/bootstrap-3.3.7.css">
    </head>
    <body>
    <div class="app">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h2>图书管理系统</h2>
            </div>
            <div class="panel-body form-inline">
                <label for="">id:<input type="text" class="form-control" v-model="id"></label>
                <label for="">图书名称:<input type="text" class="form-control" v-model="name"></label>
                <input type="button" value="添加" class="btn btn-primary" @click="add">
            </div>
        </div>
        <table class="table table-bordered table-hover">
            <thead>
            <tr>
                <th>id</th>
                <th>图书名称</th>
                <th>添加时间</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody>
            <tr v-for="item in arr" :key="item.id">
                <td v-text="item.id"></td>
                <td v-text="item.name"></td>
                <td v-text="item.time"></td>
                <td><a href="" @click.prevent="del(item.id)">删除</a></td>
            </tr>
            </tbody>
        </table>
    </div>
    <script>
        var vm= new Vue({  //创建vue实例
            el:'.app',
            data:{
                arr:[
                    {'id':1,'name':'三国演义','time':new Date()},
                    {'id':2,'name':'红楼梦','time':new Date()},
                    {'id':3,'name':'西游记','time':new Date()},
                    {'id':4,'name':'水浒传','time':new Date()}
                ], //创建一些初始数据与格式
                id:'',
                name:''
            },
        })
    </script>
    </body>
    </html>
  • 相关阅读:
    周记【距gdoi:133天】
    tarjan
    1040: [ZJOI2008]骑士
    次小生成树 最小度限制生成树
    2014.12.12 生成树
    bzoj 3217: ALOEXT
    Segmentation models 是一个基于PyTorch的图像分割神经网络-------------------->>>>实例测试
    venv创建虚拟环境
    ubuntu16.04-arm版 下载和编译pytorch
    segmentation_models_pytorch库学习
  • 原文地址:https://www.cnblogs.com/tszr/p/15391234.html
Copyright © 2011-2022 走看看