详解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 相关文章推荐
你需要知道的JavsScript可以做什么?
Jun 29 Javascript
javascript 词法作用域和闭包分析说明
Aug 12 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
May 28 Javascript
IE与FireFox中的childNodes区别
Oct 20 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
Jun 07 Javascript
Sea.JS知识总结
May 05 Javascript
微信小程序  简单实例(阅读器)的实例开发
Sep 29 Javascript
jquery的 filter()方法使用教程
Mar 22 jQuery
解决angular2 获取到的数据无法实时更新的问题
Aug 31 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 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
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
浅谈PHP中的
2016/04/23 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
php二维码生成以及下载实现
2017/09/28 PHP
javascript globalStorage类代码
2009/06/04 Javascript
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
基于javascript实现数字英文验证码
2017/01/25 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
Python 列表反转显示的四种方法
2020/11/16 Python
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
软件测试面试题
2014/01/05 面试题
《石榴》教学反思
2014/03/02 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
村居抓节水倡议书
2014/05/19 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
比较几种Redis集群方案
2021/06/21 Redis
pytorch分类模型绘制混淆矩阵以及可视化详解
2022/04/07 Python
golang生成并解析JSON
2022/04/14 Golang