详解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 打造动态渐变按钮 详细图文教程
Apr 25 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
Nov 19 Javascript
jquery提取元素里的纯文本不包含span等里的内容
Sep 30 Javascript
js 针对html DOM元素操作等经验累积
Mar 11 Javascript
jQuery实现页面滚动时动态加载内容的方法
Mar 20 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
Apr 20 Javascript
javascript中return,return true,return false三者的用法及区别
Nov 17 Javascript
基于JS实现的笛卡尔乘积之商品发布
May 13 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
May 16 Javascript
实例浅析js的this
Dec 11 Javascript
angular仿支付宝密码框输入效果
Mar 25 Javascript
关于vue中如何监听数组变化
Apr 28 Vue.js
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导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
php实现复制移动文件的方法
2015/07/29 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
js实现带有介绍的Select列表菜单实例
2015/08/18 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
Node连接mysql数据库方法介绍
2017/02/07 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
python client使用http post 到server端的代码
2013/02/10 Python
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
python中绕过反爬虫的方法总结
2020/11/25 Python
python中re模块知识点总结
2021/01/17 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
小学生元旦感言
2014/02/26 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
大学生毕业评语
2014/12/31 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis