详解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 相关文章推荐
获取dom元素那些讨厌的位置封装代码
Jun 23 Javascript
js判断选择的时间是否大于今天的代码
Aug 20 Javascript
js控制页面控件隐藏显示的两种方法介绍
Oct 09 Javascript
从零学JSON之JSON数据结构
May 19 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
bing Map 在vue项目中的使用详解
Apr 09 Javascript
Bootstrap模态对话框中显示动态内容的方法
Aug 10 Javascript
浅谈angularJS2中的界面跳转方法
Aug 31 Javascript
angularJs中$scope数据序列化的实例
Sep 30 Javascript
JavaScript将数组转换为链表的方法
Feb 16 Javascript
用VsCode编辑TypeScript的实现方法
May 07 Javascript
vue3不同环境下实现配置代理
May 25 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下载文件的详解
2013/06/02 PHP
php curl模拟post请求小实例
2013/11/13 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
Prototype Object对象 学习
2009/07/12 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
js获取ip和地区
2017/03/10 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
python访问纯真IP数据库的代码
2011/05/19 Python
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
windows下python和pip安装教程
2018/05/25 Python
使用tensorflow实现线性回归
2018/09/08 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
python处理写入数据代码讲解
2020/10/22 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
德国童装购物网站:NICKI´S.com
2018/04/20 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
三好学生先进事迹材料
2014/08/28 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
创业计划书之餐饮
2019/09/02 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL
总结三种用 Python 作为小程序后端的方式
2022/05/02 Python