详解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 相关文章推荐
jquery 获取json数据实现代码
Apr 27 Javascript
JavaScript 序列化对象实现代码
Dec 18 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
May 13 Javascript
使用apply方法实现javascript中的对象继承
Dec 16 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
JavaScript获取短信验证码(周期性)
Dec 29 Javascript
基于JavaScript实现百度搜索框效果
Jun 28 Javascript
js实现登录与注册界面
Nov 01 Javascript
js常见遍历操作小结
Jun 06 Javascript
JS几个常用的函数和对象定义与用法示例
Jan 15 Javascript
Vue实现移动端拖拽交换位置
Jul 29 Javascript
详解JavaScript中的执行上下文及调用堆栈
Apr 29 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/10/09 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
jquery防止重复执行动画避免页面混乱
2014/04/22 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
vue中touch和click共存的解决方式
2020/07/28 Javascript
Python2和Python3中print的用法示例总结
2017/10/25 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
python打包成so文件过程解析
2019/09/28 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
Python 实现数组相减示例
2019/12/27 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
一文读懂python Scrapy爬虫框架
2021/02/24 Python
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
计算机应用与科学个人的自我评价
2013/11/15 职场文书
物流专业求职计划书
2014/01/10 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
2014年后勤工作总结
2014/11/18 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书