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中通过render函数给子组件设置ref操作
Nov 17 Vue.js
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 Vue.js
vue+element实现动态加载表单
Dec 13 Vue.js
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
vue使用过滤器格式化日期
Jan 20 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
关于Vue Router的10条高级技巧总结
May 06 Vue.js
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 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实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
PHP实现动态执行代码的方法
2016/03/25 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
js中的referrer返回上一页使用介绍
2013/09/26 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
Javascript学习指南
2014/12/01 Javascript
javascript折半查找详解
2015/01/26 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
javascript基本算法汇总
2016/03/09 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
pytorch cnn 识别手写的字实现自建图片数据
2018/05/20 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
UNIX文件名称有什么规定
2013/03/25 面试题
教师申诉制度
2014/01/29 职场文书
家庭贫困证明
2014/09/23 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
导游词之无锡唐城
2019/12/12 职场文书
python解析json数据
2022/04/29 Python
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers