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中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
Vue $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 Vue.js
在vue中动态修改css其中一个属性值操作
Dec 07 Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
vue使用echarts画组织结构图
Feb 06 Vue.js
VUE实现吸底按钮
Mar 04 Vue.js
Vue + iView实现Excel上传功能的完整代码
Jun 22 Vue.js
详细聊聊vue中组件的props属性
Nov 02 Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
vue如何清除浏览器历史栈
May 25 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
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
Yii清理缓存的方法
2016/01/06 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
Dropify.js图片宽高自适应的方法
2017/11/27 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
Python中的引用和拷贝浅析
2014/11/22 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
python numpy存取文件的方式
2020/04/01 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
高中军训广播稿
2014/01/14 职场文书
购房协议书范本
2014/04/11 职场文书
网页美工求职信范文
2014/04/17 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
机关单位2016年法制宣传日活动总结
2016/04/01 职场文书