-
2020-06-11 00:09:06
一、原生事件和组件事件的绑定
原生事件的绑定是通过addEventLister绑定给真实的元素的;组件事件绑定是通过vue自定义的$on实现的。如果要在组件上使用原生事件,需要加.native修饰符,这样就相当于在父组件中把子组件当做普通html标签,然后加上原生事件。
二、$on和$emit的实现
$on、$emit是基于订阅观察者模式的,维护一个事件中心,on的时候将事件按名称存在事件中心里,称之为订阅者,然后emit将对应的事件进行发布,去执行事件中心里的对应的监听器
1、vue先创建一个构造器,维护一个事件中心events
function EventEmiter(){ this.events = {} }
2、$on
EventEmiter.prototype.on = function(event,cb){ if(this.events[event]){ this.events[event].push(cb) }else{ this.events[event] = [cb] } }
3、$emit
EventEmiter.prototype.emit = function(event){ let args = Array.from(arguments).slice(1) let cbs = this.events[event] if(cbs){ cbs.forEach(cb=>{ cb.apply(this,args) }) } }
更多相关内容 -
vue绑定事件后获取绑定事件中的this方法
2020-12-12 19:21:21使用$event传递参数(事件本身) <input v-model="checknames" @change="changecheckbox(item,$event)" style="float: right" type=...以上这篇vue绑定事件后获取绑定事件中的this方法就是小编分享给大家的全部内容了 -
vue事件绑定中的事件修饰符
2022-03-20 20:48:51vue.js事件修饰符在vue中,我们不需要操作Dom元素,可以很方便的绑定事件,其中就有事件修饰符来解决一些Dom事件的细节。
vue.js中给v-on(简写:@)提供了事件修饰符,修饰符是由点开头的指令后缀来表示的。
.stop
.prevent
.capture
.self
.once
.passive
1..stop
会阻止冒泡。
<div style="height: 100px; width: 200px; background-color: yellow; line-height: 100px;"> <button @click.stop="son">点击</button> </div> <!-- 当点击了作为儿子的button时,会阻止它的冒泡,这样就影响不到div -->
2.prevent
会阻止默认行为发生
<a href="http://www.baibu.com" @click.prevent="show">跳转百度页面</a> <!-- 这样点击了这个链接将不会跳转 -->
3.capture
捕获冒泡,即有冒泡发生时,有该修饰符的dom元素会先执行,如果有多个,从外到内依次执行,然后再按本来的顺序执行触发的事件。
<!-- 添加事件监听器时使用事件捕获模式 --> <!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 --> <div v-on:click.capture="doThis">...</div>
4.self
将事件绑定到当前元素自身,只有当前元素自身才能触发,通常用于避免冒泡事件的影响
<!-- 只当在 event.target 是当前元素自身时触发处理函数 --> <!-- 即事件不是从内部元素触发的 --> <div v-on:click.self="doThat"></div>
5.once
设置事件只能触发一次
6.passive
passive 会告诉浏览器你不想阻止事件的默认行为。提早告诉,提高性能。
-
Vue事件绑定(非常详细哦~)
2021-01-19 08:16:44下面是对Vue中事件绑定的整理,希望可以帮助到有需要的小伙伴~ 事件绑定 vue如何处理事件 v-on指令用法 <input type= ‘button”v-on:click="num++'/> v-on简写形式 <input type= ‘button'@click='...下面是对Vue中事件绑定的整理,希望可以帮助到有需要的小伙伴~
事件绑定
-
vue如何处理事件
-
v-on指令用法
<input type= ‘button”v-on:click="num++'/>
-
v-on简写形式
<input type= ‘button'@click='num++/>
-
-
事件函数的调用方式
-
直接绑定函数名称
<button v-on :click(事件类型)='say(方法名)'>Hello</button>
-
调用函数
<button v-on:click(事件类型)='say()(方法名())' >say hi</button>
-
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>事件绑定</title> </head> <body> <!-- 1. 提供标签用于存放数据 --> <div id="app"> <!-- 4. 把vue提供的数据填充到标签里面 --> <!-- 把msg数据存放到id为app的div中 --> <!-- {{}} : 插值表达式 * 把数据填充到HTML标签里 * 支持基本的计算操作 --> <div>{{num}}</div> <div> <button v-on:click="num++">点击</button> <button @click="num++">点击@</button> <button @click="handle">点击方法1</button> <button @click="handle()">点击方法1</button> </div> </div> <!-- 2. 引入vue.js库文件 --> <script src="js/vue.js"></script> <script> // 3. 使用vue语法实现功能 // 事件绑定 var vm = new Vue({ // el:告诉vue把数据插入到哪个位置 el: "#app", // data: 提供数据 data: { num: 0 }, // vue的第二个属性 -- 写方法 methods: { handle: function(){ // 这里的this指针指向Vue的实例对象 console.log(this === vm); this.num++; } } }) </script> </body> </html>
事件绑定-传参 示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>事件绑定</title> </head> <body> <!-- 1. 提供标签用于存放数据 --> <div id="app"> <!-- 4. 把vue提供的数据填充到标签里面 --> <!-- 把msg数据存放到id为app的div中 --> <!-- {{}} : 插值表达式 * 把数据填充到HTML标签里 * 支持基本的计算操作 --> <div>{{num}}</div> <div> <button @click="handle1">点击方法1传参</button> <button @click="handle2(123,456,$event)">点击方法2传参</button> </div> </div> <!-- 2. 引入vue.js库文件 --> <script src="js/vue.js"></script> <script> // 3. 使用vue语法实现功能 /* 事件绑定 1. 如果事件直接绑定函数名称,那么默认会传递事件对象作为事件函数的第一个参数event 2. 如果事件绑定函数调用,那么事件对象必须作为最后一个参数显示传递,并且事件对象的名称必须是$event */ var vm = new Vue({ // el:告诉vue把数据插入到哪个位置 el: "#app", // data: 提供数据 data: { num: 0 }, // vue的第二个属性 -- 写方法 methods: { // 点击方法2的函数 handle2: function(p,p1){ // 这里的this指针指向Vue的实例对象 console.log(this === vm); console.log(p,p1); // 通过传递的最后一个参数$event,拿到触发事件的对象 console.log(event.target.tagName); // 通过传递的最后一个参数$event,拿到触发事件的内容 console.log(event.target.innerHTML); this.num++; }, handle1: function(event) { // 参数event是事件对象 console.log(event.target.innerHTML); } } }) </script> </body> </html>
4.事件修饰符
-
stop阻止冒泡
<a v-on :click.stop="handle">跳转</ a>
-
prevent阻止默认行为
<a v-on :click-prevent="handle">跳转</ a>
更多的事件修饰符可以参考API:https://cn.vuejs.org/v2/api/#v-on
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>事件修饰符</title> </head> <body> <!-- 1. 提供标签用于存放数据 --> <div id="app"> <!-- 4. 把vue提供的数据填充到标签里面 --> <!-- 把msg数据存放到id为app的div中 --> <!-- {{}} : 插值表达式 * 把数据填充到HTML标签里 * 支持基本的计算操作 --> <div>{{num}}</div> <div v-on:click="handle0"> <button @click.stop="handle1">点击方法1</button> </div> <div> <a href="http://www.baidu.com" v-on:click.prevent="handle2">百度</a> </div> </div> <!-- 2. 引入vue.js库文件 --> <script src="js/vue.js"></script> <script> // 3. 使用vue语法实现功能 /* 事件绑定 1. 如果事件直接绑定函数名称,那么默认会传递事件对象作为事件函数的第一个参数event 2. 如果事件绑定函数调用,那么事件对象必须作为最后一个参数显示传递,并且事件对象的名称必须是$event */ var vm = new Vue({ // el:告诉vue把数据插入到哪个位置 el: "#app", // data: 提供数据 data: { num: 0 }, // vue的第二个属性 -- 写方法 methods: { handle0: function(){ this.num++; }, handle1: function(event) { // 参数event是事件对象 // 阻止冒泡 event.stopPropagation(); }, handle2: function(){ // 阻止默认行为 event.preventDefault(); } } }) </script> </body> </html>
5. 按键修饰符
-
.enter 回车键
<input v-on : keyup.enter="submit '>
-
.delete删除键
<input v-on : keyup.delete='handle' >
更多的按键修饰符可以参考官网API
示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>按键修饰符</title> </head> <body> <div id="app"> <form action=""> <div> 用户名: <!-- v-on:keyup.delete 中的delete表示删除键 --> <input type="text" v-on:keyup.delete="clearContent" v-model="uname"> </div> <div> 密码: <!-- v-on:keyup.enter 中的enter表示回车键 --> <input type="text" v-on:keyup.enter="handleSubmit" v-model="pwd"> </div> <div> <input type="button" v-on:click="handleSubmit" value="提交"> </div> </form> </div> <script src="js/vue.js"></script> <script> // 按键修饰符 var vm = new Vue({ el: "#app", data: { uname: '', pwd: '' }, methods: { clearContent: function(){ // 按delete键的时候,清空用户名 this.uname = ''; }, handleSubmit: function(){ console.log(this.uname,this.pwd) } } }) </script> </body> </html>
6. 自定义案件修饰符
全局config.keyCodes对象
每一个值是一个按键的唯一标识
vue.config.keycodes.f1 = 112
每一个按键都有一个唯一标识的数字:
示例1:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>自定义按键修饰符</title> </head> <body> <div id="app"> <input type="text" v-on:keyup="handle" v-model="info"> </div> <script src="js/vue.js"></script> <script> // 按键修饰符 var vm = new Vue({ el: "#app", data: { info: '' }, methods: { handle: function(event){ console.log(event.keyCode) } } }) </script> </body> </html>
示例2:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>自定义按键修饰符</title> </head> <body> <div id="app"> <!-- 65对应的是a键 --> <input type="text" v-on:keyup.65="handle" v-model="info"> </div> <script src="js/vue.js"></script> <script> // 按键修饰符 var vm = new Vue({ el: "#app", data: { info: '' }, methods: { handle: function(event){ console.log(event.keyCode) } } }) </script> </body> </html>
示例3:
通过事件绑定,自定义按键修饰符
规则:自定义按键修饰符名字是自定义的,但是对应的值必须是按键对应event.keyCode值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>自定义按键修饰符</title> </head> <body> <div id="app"> <!-- 65对应的是a键 --> <!-- 只有输入a的时候才会打印 --> <input type="text" v-on:keyup.aaa="handle" v-model="info"> </div> <script src="js/vue.js"></script> <script> // 按键修饰符 /* 事件绑定 - 自定义案件修饰符 规则:自定义按键修饰符名字是自定义的,但是对应的值必须是按键对应event.keyCode值 */ Vue.config.keyCodes.aaa = 65 // aaa是65对应的按键,即a键 var vm = new Vue({ el: "#app", data: { info: '' }, methods: { handle: function(event){ console.log(event.keyCode) } } }) </script> </body> </html>
-
-
Vue事件绑定之事件函数参数传递
2021-04-10 15:53:13<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>...div ...<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <div>{{num}}</div> <div> <button v-on:click='num++'>点击</button> <button @click='num++'>点击1</button> <button v-on:click='add'>点击2</button> <button v-on:click='add(12,45)'>点击3</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> let vm = new Vue({ el: "#app", data: { num: 0 }, //注意点:这里不要忘记加逗号 //methods里主要是定义一些函数 methods: { add: function (p1, p2) { this.num++; //在函数中,要想使用data里面的数据,一定要加this console.log(this === vm); //这里的this是vue的实例对象 console.log(p1, p2); } } }) </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <div>{{num}}</div> <div> <button v-on:click='num++'>点击</button> <button @click='num++'>点击1</button> <button v-on:click='add'>点击2</button> <button v-on:click='add(12,45,$event)'>点击3</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> let vm = new Vue({ el: "#app", data: { num: 0 }, //注意点:这里不要忘记加逗号 //methods里主要是定义一些函数 methods: { add: function (p1, p2,event) { this.num++; //在函数中,要想使用data里面的数据,一定要加this console.log(this === vm); //这里的this是vue的实例对象 console.log(p1, p2); console.log(event.target.tagName) } } }) </script> </body> </html>
点击按钮(点击3)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <div>{{num}}</div> <div> <button v-on:click='num++'>点击</button> <button @click='num++'>点击1</button> <button v-on:click='add'>点击2</button> <button v-on:click='add(12,45,$event)'>点击3</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> let vm = new Vue({ el: "#app", data: { num: 0 }, //注意点:这里不要忘记加逗号 //methods里主要是定义一些函数 methods: { add: function (p1, p2,event) { this.num++; //在函数中,要想使用data里面的数据,一定要加this console.log(this === vm); //这里的this是vue的实例对象 console.log(p1, p2); console.log(event.target.innerHTML); } } }) </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="app"> <div>{{num}}</div> <div> <!-- 如果事件直接绑定函数名称,那么默认会传递事件对象作为事件函数的第一个参数 --> <button v-on:click='handle1'>点击1</button> <!-- 2、如果事件绑定函数调用,那么事件对象必须作为最后一个参数显示传递, 并且事件对象的名称必须是$event --> <button v-on:click='handle2(123, 456, $event)'>点击2</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el: '#app', data: { num: 0 }, methods: { handle1: function(event) { console.log(event.target.innerHTML) }, handle2: function(p, p1, event) { console.log(p, p1) console.log(event.target.innerHTML) this.num++; } } }); </script> </body> </html>
-
Vue 事件绑定与解绑
2022-01-04 16:16:25目录 事件绑定 基础知识 使用场景 注意事项 v-on 绑定事件 语法 实例 $ref绑定事件 语法 实例 事件解绑 语法 实例 事件绑定 基础知识 使用场景 子组件==>父组件传数据 在父组件中给子组件绑定自定义事件,事件的回... -
vue事件绑定@click
2021-09-17 22:24:38vue事件绑定@click 事件绑定 1.Vue如果处理事件? v-on指令用法 <input type= 'button' v-on:click = 'num++'/> v-on简写形式 <input type = 'button' @click = 'num++' /> 2.事件调用函数方式 ... -
vue 事件绑定函数加括号和不加括号的区别
2021-12-15 11:38:09自定义事件加不加括号的区别 不加括号: <div> <button @click="test">测试</button> </div> test(id){ console.log(id); } 加括号: <div> <button @click="test()"&... -
Vue事件绑定与监听
2018-09-26 16:30:44Vue.js提供了v-on指令用来监听DOM事件,通常在模板内直接使用,而不像传统方式在js中获取DOM元素,然后绑定事件,例如: &lt;button v-on:click="say"&gt;Say&lt;/button&... -
详解Vue 动态组件与全局事件绑定总结
2020-10-17 18:37:30主要介绍了详解Vue 动态组件与全局事件绑定总结,从示例中发现并解决问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
vue——事件绑定
2021-08-22 10:06:01Vue中的事件处理方法: 一、事件绑定基础语法有两种写法: 1、直接写函数名,@click="handleClick"; 2、加$event,@click="handleClicks($event,参数)"参数可选, $event是内置事件对象 ; 好处:不但可以传事件对象,还... -
vue实现绑定事件的方法实例代码详解
2020-10-16 19:45:14主要介绍了vue实现绑定事件的方法实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 -
vue事件绑定详解
2017-05-31 22:42:22在上篇中,我们说到了Vue时间绑定用v-on,今天我们就来详细说说。缩写:@修饰符:.stop - 调用 event.stopPropagation()。 .prevent - 调用 event.preventDefault()。 .capture - 添加事件侦听器时使用 capture 模式... -
vue实现给div绑定keyup的enter事件
2020-11-19 23:45:57vue给div绑定keyup的enter事件实现接电话(结合阿里云软电话SDK) 摘要:之前我们的接入的阿里云软电话SDK的功能,现在有个新的需求就是我们自己的弹窗中添加一个按钮可以接听电话,同时可以按键盘的Enter键接电话。... -
vue的事件绑定与方法详解
2020-08-29 16:56:04主要为大家详细介绍了vue的事件绑定与方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
vue核心面试题:vue中的事件绑定原理
2020-08-17 23:34:322.组件的事件绑定,组件绑定事件采用的是 $on 方法 。 let compiler = require('vue-template-compiler'); // vue loader中的包 let r1 = compiler.compile('<div @click="fn()"></div>'); // 给普通... -
Vue 组件绑定事件无效
2020-06-14 22:01:25在vue中直接在组件上绑定事件是无效的,例如以下代码是无效的: <div id="app"> <btn @click='alert(1)'>点击</btn> </div> <script src=... -
Vue中事件绑定的原理简述
2020-03-23 07:21:12Vue的事件分为2种,一种是原生事件绑定,还有一种是组件的事件绑定。 1. 原生dom事件的绑定,采用的是addEventListener实现;...组件绑定事件采用的是on方法(可用on方法(可用on方法(可用event触发)。 ... -
Vue中的事件绑定和属性绑定
2020-07-18 23:52:08事件绑定:v-on标签绑定click事件 例子:实现点击页面上的hello的同时将显示内容改为world 例子解释: 在div标签上绑定一个点击事件,名为handleClick。 在vue实例的methods对象里定义handleClick方法。 当... -
解决vue 绑定对象内点击事件失效问题
2020-12-12 05:16:30突然的发现某段 html 代码中点击事件失效了。 仔细观察才发现,这段代码内的...以上这篇解决vue 绑定对象内点击事件失效问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 -
Python全栈(六)项目前导之8.Vue事件绑定、计算属性、表单输入绑定和自定义组件
2020-04-04 11:06:26事件绑定是在HTML元素中通过v-on或@绑定事件,可以传入参数;还可传递$event参数来获取原生DOM事件。计算属性可以表示需要经过计算才能得出的属性值,缓存让计算属性更加高效;计算属性中默认含有get方法,还可以... -
vue动态生成dom并且自动绑定事件
2021-01-19 16:09:11用jquery的时候你会发现,页面渲染后动态生成的dom,在生成之前的代码是没...但是vue基于数据绑定的特性让它能生成的时候直接绑定数据。 html: <input type=text v-model=item.val style=width:40px> -
Vue之组件自定义事件的绑定和解绑
2021-12-04 15:23:14不知道小伙伴们还记不记得在用 Vue 构建 TodoList 案例的博客中,我们有涉及到要从子...使用场景:A 是父组件,B 是子组件,B 想给 A 传数据,那么就要在 A 中给 B 绑定自定义事件(事件的回调在 A 中) 组件自定义事 -
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020-10-15 08:15:50主要介绍了关于vue3默认把所有`onSomething`当作`v-on`事件绑定的思考,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
Vue如何绑定事件
2020-07-27 16:40:35指令 v-on 用于监听 DOM 事件,并在触发时运行一些 JavaScript 代码,简写为 @ ,其事件类型由参数决定,与 v-bind 指令相同,冒号后面是参数,举个栗子如下 <div id="app"> <button v-on:click='count+... -
vue中事件绑定$event
2018-11-04 21:36:26 -
vue系列--vue是如何实现绑定事件
2019-05-27 22:00:48vuejs中的事件绑定,使用<v-on:事件名 = 函数名>来完成的,这里函数名是定义在Vue实例中的methods对象中的,Vue实例可以直接访问其中的方法。 二、事件绑定方式 1、 直接在标签中写js方法 <button v... -
vue中JSX绑定原生事件
2020-04-30 17:29:33用的是:nativeOnClick { this.navList && this.navList.map((it, index) => <router-link tag={ 'span' } to={ { path: it.path } } class={ `${ styles.item } ${ this.currentNavIndex...