详解Vue2.0之去掉组件click事件的native修饰


Posted in Javascript onApril 20, 2017

这个是在组件开发中遇到的问题,当时我在编写button的组件,模板是这样的:

<template>
 <button class="disable-hover button ion-button"
     :class="[modeClass,typeClass,shapeClass,sizeClass,colorClass,roleClass,strongClass]">
  <span class="button-inner">
   <slot></slot>
  </span>
  <div class="button-effect"></div>
 </button>
</template>

使用是这样子的:

<ion-button @click.native="primary()" color="primary">primary</ion-button>

根据Vue2.0官方文档关于父子组件通讯的原则,父组件通过prop传递数据给子组件,子组件触发事件给父组件。但父组件想在子组件上监听自己的click的话,需要加上native修饰符,故写法就像上面这样。

好吧,处女座的毛病又来了。像button这样常用的组件如果加上native的话是感觉很突兀的。虽然组件设计有自身的考虑,因此我想将click的native去掉,思路如下:

  1. 子组件监听父组件给的click事件,
  2. 子组件内部处理click事件然后向外发送click事件:$emit("click".fn)

改造后的代码如下(亲测可用):

<template>
 <button class="disable-hover button ion-button" @click="_click"
     :class="[modeClass,typeClass,shapeClass,sizeClass,colorClass,roleClass,strongClass]">
  <span class="button-inner">
   <slot></slot>
  </span>
  <div class="button-effect"></div>
 </button>
</template>

<script type="text/babel">
export default{
  ....
  ....
  methods: {
   _click: function () {
    this.$emit('click', function () {
     alert('inner')
    })
   }
  }
}
</script>

父组件中这样使用:

<ion-button @click="primary()" color="primary">primary</ion-button>

也许读者能看出来,我正在参照IONIC2.X的组件API写Vue2.0的功能组件,目前只完成了:ActionSheet、Button、Icon、Alert、Toast这几个,一边看IONIC源码,一边将思路总结写成Vue代码,也就是花点时间。积累自己的组件库希望以后能开发快点。

现在项目地址在这里,前期以实现功能为主,不建议用在生产环境,读读代码实现思路就好,中文备注都做好了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
理解Javascript_12_执行模型浅析
Oct 18 Javascript
JavaScript对象学习经验整理
Oct 12 Javascript
简单选项卡 js和jquery制作方法分享
Feb 26 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
Aug 10 Javascript
js图片翻书效果代码分享
Aug 20 Javascript
jQuery实现的背景动态变化导航菜单效果
Aug 24 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
Jun 01 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
VSCode 配置React Native开发环境的方法
Dec 27 Javascript
JS原生瀑布流效果实现
Apr 26 Javascript
运用js实现图层拖拽的功能
May 24 Javascript
AngularJS实现根据不同条件显示不同控件
Apr 20 #Javascript
详解Vuejs2.0之异步跨域请求
Apr 20 #Javascript
bootstrap3 dialog 更强大、更灵活的模态框
Apr 20 #Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
Apr 20 #Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
Apr 20 #Javascript
bootstrap常用组件之头部导航实现代码
Apr 20 #Javascript
基于JavaScript实现活动倒计时效果
Apr 20 #Javascript
You might like
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
virtualenv实现多个版本Python共存
2017/08/21 Python
python编程嵌套函数实例代码
2018/02/11 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
pandas 时间格式转换的实现
2019/07/06 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
python基于opencv检测程序运行效率
2019/12/28 Python
python实现简单飞行棋
2020/02/06 Python
如何在django中添加日志功能
2020/02/06 Python
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
医生自荐信
2013/10/11 职场文书
入党介绍人评语
2014/05/06 职场文书
工程售后服务方案
2014/06/08 职场文书
交通违章检讨书
2014/09/21 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
教师求职自荐信范文
2015/03/04 职场文书
毕业生政审意见范文
2015/06/04 职场文书
技术转让协议书
2016/03/19 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle