首页 > 其他分享 >Vue2入门之超详细教程七-事件处理

Vue2入门之超详细教程七-事件处理

时间:2023-04-24 14:12:25浏览次数:59  
标签:事件处理 Vue console name 之超 showInfo 事件 Vue2 methods

1、简介

  事件的基本使用:

    (1)使用v-on:xxx或者@xxx绑定事件,其中xxx是事件名

    (2)事件的回调需要配置在methods对象中,最终会在vm上

    (3)methods中配置的函数,不要用箭头函数!否则this就不是vm了

    (4)methods中配置的函数,都是被Vue所管理的函数,this指向是Vm或组件实例对象

    (5)@click=”demo”和@click=”$event”效果一致,但后者可以传参;

  学习Vue之前最后会一些HTML和CSS的基础知识,HTML基础知识 传送门,CSS基础知识 传送门

2、事件处理

1. 点击事件

  在vscode中创一个新目录,叫“06_事件处理”,在下面创建一个“事件的基本使用.html”文件,在里面输入以下代码:

<!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 tyoe="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

    <div id="root">

        <h2>欢迎来到{{name}}学习</h2>

        <button v-on:click="showInfo">点我提示信息</button>

    </div>

</body>

<script type="text/javascript">

    Vue.config.productionTip = false

 

    const vm = new Vue({

        el:"#root",

        data:{

            name:"Mr. Li"

        },

        methods:{

            showInfo(){

                alert('同学你好~')

            }

        }

    })

</script>

</html>

  v-on用来绑定事件,上面代码绑定了点击事件(click),对应的处理函数名称叫做showInfo,在Vue实例中定义showInfo具体要做的事。

 

  v-on:click="showInfo"可以简写为@click="showInfo"

2.接收参数

<!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 tyoe="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

    <div id="root">

        <h2>欢迎来到{{name}}学习</h2>

        <!-- <button v-on:click="showInfo">点我提示信息</button> -->

        <button v-on:click="deleteInfo($event,66)">点我提示信息</button>

    </div>

</body>

<script type="text/javascript">

    Vue.config.productionTip = false

 

    const vm = new Vue({

        el:"#root",

        data:{

            name:"Mr. Li"

        },

        methods:{

            showInfo(){

                alert('同学你好~')

            },

            deleteInfo(event,number){

                console.log(event,number)

            }

        }

    })

</script>

</html>

 

3.事件修饰符

<!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 tyoe="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

    <div id="root">

        <h2>欢迎来到{{name}}学习</h2>

        <a href="https://www.cnblogs.com/lirongyang/" @click.prevent="showInfo">点我去学习</a>

    </div>

</body>

<script type="text/javascript">

    Vue.config.productionTip = false

 

    const vm = new Vue({

        el:"#root",

        data:{

            name:"Mr. Li"

        },

        methods:{

            showInfo(){

                alert('同学你好~')

            }

        }

    })

</script>

</html>

  其中绑定事件的代码有一些不同@click.prevent="showInfo"后面跟了prevent这就是事件修饰符,本来a标签有一个默认操作,点击后就跳转到我们提起输入的网站,但因为有这个修饰,给阻止了默认操作

Vue中的事件修饰符:

  1. prevent:阻止默认事件(常用)
  2. stop:阻止事件冒泡(常用)
  3. once:事件只触发一次(常用)
  4. capture:使用事件的捕获模式
  5. self:只有event.target是当前操作的元素时才触发事件
  6. passive:事件的默认行为立即执行,无需等待事件回调执行完毕

  

<!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 tyoe="text/javascript" src="../js/development/vue.js"></script>
    
</head>
<body>
    <div id="root">
        <h2>欢迎来到{{name}}学习</h2>
        <!-- 阻止默认事件(常用) -->
        <a href="https://www.cnblogs.com/lirongyang/" @click.prevent="showInfo">点我去学习</a>
        <!-- 阻止事件冒泡(常用) -->
        <div class="demo1" @click="showInfo">
            <button @click.stop="showInfo">点我触发冒泡</button>
        </div>
        <!-- 事件只触发一次(常用) -->
        <button @click.once="showInfo">我只能被触发一次</button>
        <!-- 使用事件的捕获模式 -->

    </div>
</body>
<script type="text/javascript">
    Vue.config.productionTip = false
   const vm = new Vue({
        el:"#root",
        data:{
            name:"Mr. Li"
        },
        methods:{
            showInfo(){
                alert('同学你好~')
            },
            deleteInfo(event,number){
                console.log(event,number)
            }
        }
    })
</script>
</html>

4. 键盘事件

  键盘事件有两种写法一种是Keydown一种是keyup,keydown是按下即触发,Keyup是按下键盘不触发,抬起时触发,一般使用keyup。

<!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 tyoe="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

    <div id="root">

        <h2>欢迎来到{{name}}学习</h2>

        <input type="text" placeholder="按下回车提示输入" @keyup="showInfo">

    </div>

</body>

<script type="text/javascript">

    Vue.config.productionTip = false

 

    const vm = new Vue({

        el:"#root",

        data:{

            name:"Mr. Li"

        },

        methods:{

            showInfo(e){

                // console.log(e.keyCode) // 输出键盘的code码

                console.log(e.target.value)

            }

        }

    })

</script>

</html>

  这样写会响应任何键盘输入,如果我们只想在输入回车时响应,那可以通过判断输入的信息是否为回车,在代码中输入console.log(e.keyCode)可以看出键盘输入的keyCode码

 

  可以判断一下输入信息是否为回车

 

  这样就不会输出其他信息了,完整代码如下

<!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 tyoe="text/javascript" src="../js/development/vue.js"></script>

</head>

<body>

    <div id="root">

        <h2>欢迎来到{{name}}学习</h2>

        <input type="text" placeholder="按下回车提示输入" @keyup="showInfo">

    </div>

</body>

<script type="text/javascript">

    Vue.config.productionTip = false

 

    const vm = new Vue({

        el:"#root",

        data:{

            name:"Mr. Li"

        },

        methods:{

            showInfo(e){

                // console.log(e.keyCode) // 输出键盘的code码

                if(e.keyCode != 13) return //不等于13就直接返回空

                console.log(e.target.value)

            }

        }

    })

</script>

</html>

  这样比较麻烦,Vue给我们提供了一个快捷方法,我们把if(e.keyCode != 13) return注释掉,然后在绑定事件的地方给加一个装饰键.enter表示只响应回车事件

@keyup.enter="showInfo"

  除了回车外还有一些其他常用键盘按键的别名如下:

  回车:enter

  删除:delete

  退出:esc

  空格:space

  换行:tab(特殊,必须配合Keydown使用)

  上:up

  下:down

  左:left

  右:right

  那如果其他的按键的别名我们怎么使用呢,我可能可以通过console.log(e.key)打印出来按键的别名(不是所有的按键都有别名)

 

  需要注意的是有的按键是两个单词,比如CapsLock,如果使用这种别名需要把单词小写两个单词之间需要用-连接

5.鼠标滚动事件

<!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="../js/development/vue.js"></script>

    <style>

        .list{

            width:200px;

            height:200px;

           

            overflow: auto;

        }

        li{

            height: 100px;

        }

    </style>

</head>

<body>

    <div id="root">

        <button v-on:click="demo">点我</button>

        <!-- <ul @wheel="demo" class="list"> -->

        <ul @scroll="demo" class="list">

            <li>1</li>

            <li>2</li>

            <li>3</li>

            <li>4</li>

        </ul>

    </div>

</body>

<script type="text/javascript">

    Vue.config.productionTip = false

 

    new Vue({

        el:"#root",

        methods:{

            demo(){

                console.log('@')

            }

        }

    })

</script>

</html>

  鼠标滚动事件有两种写法,第一个是scroll第二个是wheel,两种的区别在于scroll先响应事件在执行绑定函数,wheel会先执行绑定函数在响应事件,我们改一下代码,在demo方法中加一个循环

  可以看出当wheel时,滚动鼠标会先执行打印,下拉条的位置没有发生变化。

 

  大家可以换成scroll在试试。

 

标签:事件处理,Vue,console,name,之超,showInfo,事件,Vue2,methods
From: https://www.cnblogs.com/lirongyang/p/17233798.html

相关文章

  • vue2源码-十三、nextTick在哪里使用?原理是什么?
    nextTick在哪里使用?原理是什么?nextTick内部采用了异步任务进行包装(多个nextTick调用会被合并成一次,内部会合并回调)最后在异步任务中批处理。主要应用场景就是异步更新(默认调度的时候就会添加一个·nextTick任务)用户为了获取最终的渲染结果需要在内部任务执行之后再执行用户逻......
  • 向着Vue3进发,Vue2.7升级指南
    北京时间7月1号,Vue2.7正式发布,Vue2.7支持你的项目在不升级Vue3的情况下使用Vue3的特性,例如CompositionApi、setup、Cssv-bind等。与此同时,Vue2.7也是Vue2.X的最终次要版本,在这个版本之后,Vue2将进入LTS(长期支持),即从现在开始持续18个月,Vue2将不再接收新功能。对于一些老项目来说......
  • Vue 项目安全扫描漏洞,JS 库版本太低,要求升级 YUI(vue2 升级javascript库)【检测到目标站
    原帖:https://blog.csdn.net/u012961419/article/details/130016341背景公司信安部门对项目进行安全扫描,查出一些漏洞,其中有一项要求升级javascript框架库(如图): 吓得我以为让我把Vue2升级成Vue3。经过一番询问后才知道,是工具包中依赖的YUI是存在安全漏洞的版本。漏洞定......
  • 事件处理
    监听事件用v-on指令或简写@来监听DOM事件,并在事件触发时执行对应的JSv-on:click="handler"或@click="handler"这里的handler事件处理器的值可以是:1.内联事件处理器:事件被触发时执行的内联JS语句(与onclick类似)data(){return{count:0}}<button@click="cou......
  • 解决vue2.0路由 TypeError: Cannot read property 'matched' of undefined 的错误问题
      找了很久这个问题 解决vue2.0路由TypeError:Cannotreadproperty'matched'ofundefined的错误问题-北桥苏-博客园(cnblogs.com)  解决办法改为   问题解决  没有找到为什么 好像高版本的router没有这个问题 我因为需要降级到了3.1.3 ......
  • vue2源码-十二、mixin的使用和原理
    mixin的使用和原理使用:可以通过Vue.mixin来实现逻辑的复用,问题在于数据来源不明确。声明的时候可能对导致命名冲突vue3采用的就是compositionAPI局部混入:varmyMixin={created:function(){this.hello()},methods:{hello:function(){......
  • vue2源码-十一、Vue的生命周期
    Vue的生命周期钩子函数是如何实现?内部利用一个发布订阅模式,将用户写的钩子维护成一个数组,后续依次调用hooks。主要靠的是mergerOptions方法有哪些?引用自https://vue3js.cn/interview/vue/lifecycle.html#%E4%BA%8C%E3%80%81%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E6%9C%......
  • Vue&Element-Ui(支技VUE2)&解决ttf, woff 文件报错的问题
    一、Vue&Element-Ui(支技VUE2)Vue是一套用于构建用户界面的渐进式JavaScript(主张最少)框架,开发者只需要关注视图层,它不仅易于上手,还便于与第三方库或既有项目的整合。是基于MVVM(Model-View-ViewModel即:视图层-视图模型层-模型层)设计思想。提供MVVM数据双向绑定的库,专注于UI......
  • vue2升vue3后部分异常解决
    element-ui升为element-plus首先建议参考element-plus官方站点:https://element-plus.org/zh-CN/部分组件标签直接变更如el-submenu变更为el-sub-menu浏览器提示ElementPlusError:[ElOnlyChild]novalidchildnodefound哪个页面有该提示就搜"slot=",然后到element......
  • vue2源码-九、异步更新
    异步更新异步更新原因以下情况下:vm.name='123'vm.name='234'vm.name='123'...如果我们频繁的修改一个数据,就会多次触发视图渲染dep.notify->watcher.update这样就会降低性能,因此就需要采用异步更新策略,仅仅在最后执行一次视图更新操作。思路当数据变化时,先......