Vue事件的基本操作你知道吗

Vue事件的基本操作你知道吗

目录

1.事件的基本操作

1.1v-on

1.1.1v-on的小案例

1.2事件修饰符

1.2.1事件修饰符代码解析

1.3键盘事件

1.4计算属性(computed)

1.5监视属性(watch)

1.5.1watch和computed的区别

总结

1. 事件的基本操作 1.1 v-on

功能:绑定指定事件名的回调函数

标准写法: v-on:click='xxx' v-on:keyup='xxx(参数)' v-on:keyup.enter='xxx' 简便写法: @click='xxx' @keyup='xxx' @keyup.enter='xxx' 1.1.1 v-on的小案例 <div id="root"> <!-- 需求当点击按钮时弹出同学你好! --> <h1>欢迎来到{{name}}学习</h1> <!-- v-on:xxx可以简写为: @xxx --> <button v-on:click="btn1">点击我进行学习(不传参)</button> <button @click="btn2('hello!','同学',$event)">点击我进行学习(传参) //如果需要传参数的话就在后面加(),里面写的就参数 </div> <script> /* 事件回调需要写在methods对象中,最终会在vm上 methods中配置的函数,不要使用箭头函数 methods中配置的函数,this指向vm或者是组件实例化对象 */ Vue.config.productionTip = false var vm = new Vue({ el: '#root', data: { name: "清华大学" }, methods: { btn1() { alert("同学你好!") }, btn2(x, y, event) { console.log(x, y); console.log(event.target.innerText); alert("同学你好!") } } }) </script> 1.2 事件修饰符 Vue中的事件修饰符有6个 - prevent : 阻止默认行为 - stop : 禁止冒泡 - once : 事件只触发一次 - capture : 使用事件捕获模式 - self : 只有even.target所指向的操作元素才能触发事件 - passive : 让事件的默认行为立即执行<body> <div id="root"> <!-- 1. prevent : 阻止默认行为 --> <a href="https://www.bilibili.com/" @click.prevent = "prevent">点击我进入b站</a> <hr> <!-- 2. stop : 禁止冒泡 --> <div @click = "stop" class="div1"> <button @click.stop = "stop">点击我触发事件</button> </div> <hr> <!-- 3. once : 事件只触发一次 --> <button @click.once = "once">我只能触发一次哦</button> <hr> <!-- 4. capture : 使用事件捕获模式 --> <div class="box1" @click.capture = "capture(1)"> div1 <div class="box2" @click = "capture(2)"> div2 </div> </div> <hr> <!-- 5. self : 只有even.target所指向的操作元素才能触发事件 相当于要满足两个条件 - 1. event.target必须指向self所修饰的元素 - 2. 触发的也必须是这个元素 从某种意义上相当于禁止了冒泡,因为冒泡虽然触发上面事件 但是event.target所指向的并非是这个元素 --> <div class="box3" @click.self = "self"> <button @click = "self">点击我</button> </div> <hr> <!-- 6. passive : 让事件的默认行为立即执行 scroll:表示的是滚动条进行滚动,滚动条改变就触发,并且滑到底就不能继续触发 wheel :表示的是鼠标滚轮滚动,滚动一次就触发一次,滑到底依旧可以触发 --> <ul style="overflow: auto; height: 100px;" @scroll.passive = "passive"> <li style="height: 600px;"></li> </ul> <!-- 7. 如果想要使用多个修饰符可以使用链式形式 --> <!-- 需要即想要阻止冒泡,也想要禁止默认行为 --> <div @click = "stop" class="div1"> <a @click.stop.prevent = "stop" href="https://www.baidu.com">点击我进入</a> </div> </div> 1.2.1 事件修饰符代码解析

html代码

<body> <div id="root"> <!-- 1. prevent : 阻止默认行为 --> <a href="https://www.bilibili.com/" @click.prevent = "prevent">点击我进入b站</a> <hr> <!-- 2. stop : 禁止冒泡 --> <div @click = "stop" class="div1"> <button @click.stop = "stop">点击我触发事件</button> </div> <hr> <!-- 3. once : 事件只触发一次 --> <button @click.once = "once">我只能触发一次哦</button> <hr> <!-- 4. capture : 使用事件捕获模式 --> <div class="box1" @click.capture = "capture(1)"> div1 <div class="box2" @click = "capture(2)"> div2 </div> </div> <hr> <!-- 5. self : 只有even.target所指向的操作元素才能触发事件 相当于要满足两个条件 - 1. event.target必须指向self所修饰的元素 - 2. 触发的也必须是这个元素 从某种意义上相当于禁止了冒泡,因为冒泡虽然触发上面事件 但是event.target所指向的并非是这个元素 --> <div class="box3" @click.self = "self"> <button @click = "self">点击我</button> </div> <hr> <!-- 6. passive : 让事件的默认行为立即执行 scroll:表示的是滚动条进行滚动,滚动条改变就触发,并且滑到底就不能继续触发 wheel :表示的是鼠标滚轮滚动,滚动一次就触发一次,滑到底依旧可以触发 --> <ul style="overflow: auto; height: 100px;" @scroll.passive = "passive"> <li style="height: 600px;"></li> </ul> <!-- 7. 如果想要使用多个修饰符可以使用链式形式 --> <!-- 需要即想要阻止冒泡,也想要禁止默认行为 --> <div @click = "stop" class="div1"> <a @click.stop.prevent = "stop" href="https://www.baidu.com">点击我进入</a> </div> </div>

js代码

<script> Vue.config.productionTip = false new Vue({ el: '#root', data: { }, methods:{ prevent(){ alert("禁止默认行为"); }, stop(){ alert("禁止冒泡") }, once(){ alert("只能触发一次") }, capture(x){ alert("现在是捕获模式 "+x) }, self() { alert("self") }, passive(){ for (let index = 0; index < 1000; index++) { console.log("1") } } } }) </script> </body> 1.3 键盘事件 常用的按键别名: 1.正常使用 例如: @keyup.enter = "xxx" - 回车 enter - 删除 delete - 退出 esc - 空格 space - 上 up - 下 down - 左 left - 右 right 2. 特别的按键 系统修饰键 : - ctrl,shift,alt,meta(就是window键) - 换行 tab(必须配合keydown去使用) - 配合keyup使用,当按下修饰键的时候在按下其他的键,然后在松开其他键事件才可以被触发 - 配合keydown使用,就直接触发事件 3.如果想要绑定其他按键,可以使用按键原始本身的key值(名字)去绑定 4.可以自定义去设置按键别名,Vue.config.keyCodes.自定义键名 = 键值

具体案例

<div id="root"> <h1>欢迎学习{{name}}</h1> <input type="text" @keyup="keyboard"> <br><br> <input type="text" @keyup.huiche="keyboard"> <br><br> <input type="text" @keyup.ctrl.y="keyboard"> </div> <script> Vue.config.productionTip = false Vue.config.keyCodes.huiche = 13 //定义了一个别名 var vm = new Vue({ el: '#root', data: { name: "Vue" }, methods: { keyboard(event){ // console.log(event.keyCode); 按键编码 // console.log(event.key); 按键的名字 console.log(event.target.value); } } }) </script> 1.4 计算属性(computed)

1.在页面中的使用方法:=={{方法名}}==来显示计算结果

2.定义:要使用的属性/变量不存在,需要通过已有的属性计算出来的

3.原理:底层是借助了Object.defineProperty方法所提供的getter和setter

4.get函数执行的时机:

(1)初次读取的时候会执行一次

(2)当所依赖的数据发生改变时就会再次被调用

5.相比于methods的优势,内部是有缓存机制(复用),效率会更高,调试会更方便

6.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变

7.需要注意的一个特殊点:以下面例子举例:get函数中return返回值的会作为fullname的值进行返回,在控制台可以看到是这样的形式呈现fullname:xxx

8.computed中的this指向是vm

9.简写形式: 基本要求就是在不使用set的情况下才可以简写 注意在调用的时候不要写成fullname()

<div id="root"> 姓: <input type="text" v-model="firstname"> <br><br> 名: <input type="text" v-model="lastname"> <!-- 第一种写法 使用插值语法 --> <!-- <h3>全名: {{firstname.slice(0,3)}} - {{lastname}}</h3> --> <!-- 第二种写法 使用methods --> <!-- <h3>全名: {{fullname()}}</h3> --> <!-- 第三种写法 使用computed(计算属性) --> <h3>全名:{{fullname}}</h3> </div> <script> Vue.config.productionTip = false let vm = new Vue({ el: '#root', data: { //属性 firstname: "张", lastname: "三", }, // methods: // { // fullname() { // // 这里的this指向是vm // return this.firstname.slice(0,3) + "-" + this.lastname // } // } computed: { fullname: { /* 1. Vue已经进行配置过了将this指向vm 2. 当用人去读取fullname时,get就会被调用,但是get只被执行一次因为Vue做了一个事,就是缓存,当执行过一次后,后面数据再去读取会走缓存这条路。 3. return 的返回值会作为fullname的值,将fullname也抛到vm (fullname:"张-三") */ get() { return this.firstname + "-" + this.lastname }, set(value) { // 当fullname被修改时,set才会被调用 var arr = value.split("-") //按照指定字符串进行拆分成数组 this.firstname = arr[0] this.lastname = arr[1] } /* 简写形式: 基本要求就是在不使用set的情况下才可以简写 注意在调用的时候不要写成fullname(),这个很特殊 computed:{ fullname(){ //相当于fullname:function(){} return this.firstname + "-" + this.lastname } } */ } } }) </script> 1.5 监视属性(watch)

1.当所监视的属性发生变化时,回调函数自动调用,进行相关的操作

2.监视属性必须要存在,才能进行监视

3.监视属性的两种写法:

(1)在new Vue中配置watch

​(2)通过vm.$watch进行监视

4.watch里handler函数this的指向是vm

<div id="root"> <h1>今天天气真{{weather}}</h1> <button @click="change">切换天气</button> <h3>a的值是: {{a}}</h3> <!-- 在这里面可以写简单的代码 --> <button @click = "a++">点击我让a+1</button> </div> <script> Vue.config.productionTip = false let vm = new Vue({ el: '#root', data: { flag: true }, computed: { weather() { return this.flag ? "凉快" : "炎热" } }, methods: { change() { return this.flag = !this.flag } }, watch:{ flag:{ // 第一个参数表示:修改后的值,第二个参数表示修改前的值 handler(newValue,oldValue){ console.log("flag被修改了"); }, immediate:true, //在一上来就执行一次 deep:true //表示深层次监视 } } }) vm.$watch("weather",{ immediate:true, handler(newValue,oldValue){ console.log("weather被修改了") } }) 1.5.1 watch和computed的区别

watch和computed的区别是:

1.watch能够完成的功能,computed不一定可以完成,但是computed可以完成的,watch也可以完成

2.computed是依靠return的返回值(getter),所以它不能够完成异步的任务,而watch可以

3.watch是靠我们自己写代码进行修改

4.在学Vue当中有两个很重要的原则:

所有被Vue管理的函数,最好写成普通的函数,因为这样this的指向才是vue或者组件的实例化对象

所有不被Vue管理的函数,最好写成箭头函数(Ajax的回调函数,定时器的回调函数,Promise的回调函数),因为这样this的指向才是vue或者组件的实例化对象

<div id="root"> <!-- 用watch写一遍姓名的案例 --> 姓: <input type="text" v-model="firstname"> <br><br> 名: <input type="text" v-model="lastname"> <h2>全名: {{fullname}}</h2> </div> <script > // 需求:想要1s过后在显示全名 Vue.config.productionTip = false let vm = new Vue({ el: '#root', data: { firstname: "张", lastname: "三", fullname: "张 - 三" }, watch: { firstname: { handler(newval) { console.log(this); //vm /* 这里使用箭头函数的目的就是为了让this指向vue 此时没有this所以他就向外面找,外面handler的this 指向是vm所以定时器的this指向也是vm */ setTimeout(() => { //这里如果使用普通函数this就指向window console.log(this); //vm this.fullname = newval + " - " + this.lastname }, 1000); } }, lastname: { handler(newval) { setTimeout(() => { this.fullname = this.firstname + " - " + newval }, 1000); } } } }) </script> 总结

以上就是今天要讲的内容,本文仅仅介绍了Vue一些基本事件的操作,希望对大家有帮助!

推荐阅读

    vue项目一些常见问题

    vue项目一些常见问题,组件,样式,**样式污染问题**同样的样式不需要在每个组件都复制组件内单独的样式加外层class包裹。加scope。否则只是

    01-Vue项目实战-网易云音乐-准备工作

    01-Vue项目实战-网易云音乐-准备工作,网易,项目,前言在接下来的一段时间,我会仿照网易云音乐,利用Vue开发一个移动端的网易云音乐项目。在做

    01- 第一天 spring boot2.3.1 +vue3.0 后台管理系统的研发

    01- 第一天 spring boot2.3.1 +vue3.0 后台管理系统的研发,自己的,后台,后台框架一直想开发一套完全属于自己的后台,但是18年的时候,曾经答

    Vue项目中 App.vue文件

    Vue项目中 App.vue文件,文件,内容, 在App.vue文件中,定义了一个id为app的div,在这个div板块中放置Helloworld组件,文件内容如下图所示:在

    1-Vue构造函数的生成

    1-Vue构造函数的生成,函数,属性,版本:@2.6.10环境:web ;思维图:www.processon.com/view/link/5…我们使用的Vue是一个经过层层加强的构造函数

    vue的跨域是什么意思

    vue的跨域是什么意思,跨域,浏览器,代理,请求,服务器,同源策略,在vue中,跨域是指浏览器不能执行其他网站的脚本;它是浏览器同源策略造成的,是浏览器

    Vue中如何实现表单验证

    Vue中如何实现表单验证,验证,表单验证,表单,用户名,元素,指令,随着web应用的不断发展,表单验证逐渐成为web开发过程中不可或缺的一部分。在Vue中

    用vue框架有什么好处

    用vue框架有什么好处,组件,项目,数据,优化,操作,框架,用vue的好处:1、Vue是组件化开发,减少代码的书写,使代码易于理解;2、可以对数据进行双向绑定;3

    Vue中的路由懒加载

    Vue中的路由懒加载,组件,路由,应用程序,懒加载,导入,函数,随着Web应用程序的复杂性不断增加,前端框架和库的使用也越来越广泛。Vue是一种流行的J

    vue路由模式有哪些

    vue路由模式有哪些,模式,浏览器,路由,请求,刷新,服务器,vue路由模式有:1、hash模式,使用URL的hash值来作为路由,支持所有浏览器;其url路径会出现“#

    如何封装组件vue

    如何封装组件vue,组件,函数,封装,复用,组件开发,维护,Vue 是一种流行的 JavaScript 框架,它可以帮助开发者快速构建交互式的 Web 应用。Vue 的一

    vue如何实现页面跳转

    vue如何实现页面跳转,页面跳转,新窗口,方法,标签,属性,函数,vue实现页面跳转的方法:1、通过<vue-link>标签实现新窗口打开;2、通过在单击事件或者