详解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 相关文章推荐
不使用XMLHttpRequest实现异步加载 Iframe和script
Oct 29 Javascript
从数据库读取数据后将其输出成html标签的三种方法
Oct 13 Javascript
jQuery获取对象简单实现方法小结
Oct 30 Javascript
Javascript URI 解析介绍
Mar 15 Javascript
JavaScript操作cookie类实例
Mar 31 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
Jun 12 Javascript
各种选择框jQuery的选中方法(实例讲解)
Jun 27 jQuery
ionic环境配置及问题详解
Jun 27 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
讲解vue-router之命名路由和命名视图
May 28 Javascript
原生js实现购物车功能
Sep 23 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
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
使用window.prompt()实现弹出用户输入的对话框
2015/04/13 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
vue keep-alive 动态删除组件缓存的例子
2019/11/04 Javascript
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
python异常处理try except过程解析
2020/02/03 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
python判断是空的实例分享
2020/07/06 Python
工程管理专业毕业生自荐信
2014/01/24 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
北京奥运会主题口号
2014/06/13 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
企业务虚会发言材料
2014/10/20 职场文书
2016春季运动会前导词
2015/11/25 职场文书
Nginx安装配置详解
2022/06/25 Servers
redis lua限流算法实现示例
2022/07/15 Redis