详解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 相关文章推荐
js ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
js实现addClass,removeClass,hasClass的函数代码
Jul 13 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
Nov 19 Javascript
Google Dart编程语法和基本类型学习教程
Nov 27 Javascript
使用CSS样式position:fixed水平滚动的方法
Feb 19 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
Nov 11 Javascript
完美解决axios跨域请求出错的问题
Feb 05 Javascript
详解Js里的for…in和for…of的用法
Mar 28 Javascript
Smartour 让网页导览变得更简单(推荐)
Jul 19 Javascript
微信小程序 简易计算器实现代码实例
Sep 02 Javascript
vue给对象动态添加属性和值的实例
Sep 09 Javascript
nuxt.js写项目时增加错误提示页面操作
Nov 05 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
让ie6也支持websocket采用flash封装实现
2013/02/18 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
python 解析html之BeautifulSoup
2009/07/07 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
部队万能检讨书
2014/02/20 职场文书
工程管理英文求职信
2014/03/18 职场文书
奖金申请报告模板
2015/05/15 职场文书
青涩记忆观后感
2015/06/18 职场文书
企业法律事务工作总结
2015/08/11 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
如何书写你的职业生涯规划书?
2019/06/27 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫