vue 自定义组件添加原生事件


Posted in Vue.js onApril 21, 2022

自定义组件如何添加使用原生事件

自定义组件(Components)是vue的重要知识块之一,使用中不少人会发现一个问题:为什么我在组件里绑定click事件不起作用?这里先看看原因吧。

在自定义组件中直接绑定原生事件vue可是"不待见"的,它会认为你没有定义这个事件,所以没有任何反应。

哪些是原生事件?

例如click单击、mouseover鼠标移入、mouseout鼠标移出、keyup键盘按下抬起、keydown键盘按下…等等一系列由官方提供的事件都是原生事件。那么咋办?

. $emit()传递

<body>
   <div id="app">
       <Jsxj :jsxj="message" @click="JsxjChange"></Jsxj>
   </div>
</body>
<script>
   var vm = new Vue({
       el:"#app",
       data:{
           message:"Hello World"
       },
       components:{
           Jsxj:{
               props:['jsxj'],
               template:`<p @click="pChange">{{jsxj}}</p>`,
               methods: {
                   pChange(){
                       this.$emit("click")
                   }
               },
           }
       },
       methods: {
           JsxjChange(){
               this.message="Hi, Jsxj"
           }
       },
   })
</script>

第一种方法是通过$emit()传递事件。如代码:我们在自定义组件Jsxj中设置模板,在模板中<p>原生元素上触发原生click事件,调用函数pChange(),函数用$emit()向上传递自定义事件click,父组件Jsxj接收到这个事件,于是便可以正常触发click。

. native属性

<body>
   <div id="app">
       <Jsxj :jsxj="message" @click.native="JsxjChange"></Jsxj>
   </div>
</body>
<script>
   var vm = new Vue({
       el:"#app",
       data:{
           message:"Hello World"
       },
       components:{
           Jsxj:{
               props:['jsxj'],
               template:`<p>{{jsxj}}</p>`  
           }
       },
       methods: {
           JsxjChange(){
               this.message="Hi, Jsxj"
           }
       },
   })
</script>

第二种方法相对简单。

代码大同小异,不过我们不再用$emit()从子向父传递自定义事件,太麻烦了,而是用native属性帮忙@click.native="JsxjChange",这样组件就会知道这是原生事件click,调用相应的函数。 

vue使用原生事件

在项目中用到element ui 这个ui框架,有些组件没有封装的事件,例如click事件 ,我在使用时感觉不起作用,后来查看vue官方文档,发现有些原生事件是不提供,还有我们自定义的组件也是不能直接使用click事件的 ,需要在click事件后写上.native才能生效

即 例如:

<el-card @click.native = "enter"></el-card>
Vue.js 相关文章推荐
详解vue实现坐标拾取器功能示例
Nov 18 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 #Vue.js
vue组件vue-esign实现电子签名
Apr 21 #Vue.js
vue动态绑定style样式
Apr 20 #Vue.js
Vue OpenLayer测距功能的实现
vue 给数组添加新对象并赋值
Apr 20 #Vue.js
vue 数字翻牌器动态加载数据
Apr 20 #Vue.js
vue3.0 数字翻牌组件的使用方法详解
Apr 20 #Vue.js
You might like
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
phpstrom使用xdebug配置方法
2013/12/17 PHP
PHP中soap的用法实例
2014/10/24 PHP
PHP微信API接口类
2016/08/22 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
理解Javascript_08_函数对象
2010/10/15 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
python使用zip将list转为json的方法
2018/12/31 Python
python中dict使用方法详解
2019/07/17 Python
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
什么是会话Bean
2015/05/14 面试题
房屋买卖协议书范本
2014/04/10 职场文书
高中教师评语大全
2014/04/25 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
教师个人教学总结
2015/02/11 职场文书
求职导师推荐信范文
2015/03/27 职场文书
大学生违纪检讨书范文
2015/05/07 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python