详解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的一个浮动框(扩展性比较好 )
Aug 27 Javascript
ECMAScript 创建自己的js类库
Nov 22 Javascript
用javascript为页面添加天气显示实现思路及代码
Dec 02 Javascript
调用DOM对象的focus使文本框获得焦点
Feb 19 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
Jul 18 Javascript
基于javascript制作经典传统的拼图游戏
Mar 22 Javascript
Bootstrap实现下拉菜单效果
Apr 29 Javascript
漫谈JS引擎的运行机制 你应该知道什么
Jun 15 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
JS实现transform实现扇子效果
Jan 17 Javascript
JavaScript实现弹出窗口效果
Dec 09 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
FCKeditor添加自定义按钮
2008/03/27 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
javascript函数中的arguments参数
2010/08/01 Javascript
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
基于jquery实现点击左右按钮图片横向滚动
2013/04/11 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
整理关于Bootstrap警示框的慕课笔记
2017/03/29 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
Python多线程学习资料
2012/12/19 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
python如何从键盘获取输入实例
2020/06/18 Python
python中PyQuery库用法分享
2021/01/15 Python
大学毕业后的十年规划
2014/01/07 职场文书
工程承包协议书
2014/10/20 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
《搭石》教学反思
2016/02/18 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js
Java基础——Map集合
2022/04/01 Java/Android
Mysql中常用的join连接方式
2022/05/11 MySQL