vue 开发一个按钮组件的示例代码


Posted in Javascript onMarch 27, 2018

最近面试,被问到一个题目,vue做一个按钮组件;

当时只是说了一下思路,回来就附上代码。

解决思路:

  1. 通过父子组件通讯($refs 和 props)
  2. props接受参数, $refs调用子组件的方法
  3. 来达到点击提交改变按钮状态,如果不成功则取消按钮状态

在src/components/ 下建一个button.vue

<template>
<!-- use plane -->
<!-- 传入bgColor改变按钮背景色 -->
<!-- state切换button的状态 调用cancel()可以切换 -->
<!-- text为按钮文字 -->
 <div class="container">
  <button 
   @click="confirm"
   :disabled="state" 
   class="confirm" 
   :style="{background: btnData.bgColor}"
  >{{text}}</button>
 </div>
</template>
<script>
export default {
 data(){
  return {
   text: this.btnData.text,
   state: false,
  }
 },
 props: {
  btnData: {
   types: Array,
   default() {
    return {
     text: '确认',
    }
   }
  }
 },
 methods: {
  confirm(){
   this.text += '...'
   this.state = true
   //这里是激活父组件的事件,因为子组件是不会冒泡到父组件上的,必须手动调用$emit
   //相对应父组件要在调用该组件的时候,将其挂载到上面
   this.$emit("confirm")
  },
  cancel(){
   this.text = this.btnData.text
   this.state = false
  }
 }
}
</script>
<style lang="less" scoped>
.confirm {
 border: none;
 color: #fff;
 width: 100%;
 padding: 1rem 0;
 border-radius: 4px;
 font-size: 1.6rem;
 background: #5da1fd;
 &:focus {
  outline: none;
 }
}
</style>

在页面中调用:

<template>
  <div class="btn-box">
   <Btn 
    :btnData="{text: '确认注册'}"
    <!--这里就要挂载$emit调用的事件 @confirm="想要调用事件的名字"-->
    @confirm="confirm"
    ref="btn"
   ></Btn>
  </div> 
</template>
<script>
import Btn from '@/components/button'
export default {
 components: {
  Btn
 },
 methods: {
  confirm(){
   if(!this.companyName){
    this.$toast("公司名不能为空") 
    this.$refs.btn.cancel()
   }
 }
}
</script>

在这里,要注意一些细节:

1. button组件形成之后和其它div元素的间距,如果是在组件内定死是很难复用的。

2. 在复用的时候,在父组件中是改变不了子组件的样式的,如果要强制更改,单独写一个并去掉scoped。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
Prototype 学习 工具函数学习($w,$F方法)
Jul 12 Javascript
学习ExtJS Window常用方法
Oct 07 Javascript
js判断鼠标位置是否在某个div中的方法
Feb 26 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
Jun 12 Javascript
一个有意思的鼠标点击文字特效jquery代码
Sep 23 jQuery
利用npm 安装删除模块的方法
May 15 Javascript
微信小程序实现圆形进度条动画
Nov 18 Javascript
AJAX XMLHttpRequest对象创建使用详解
Aug 20 Javascript
vue组件是如何解析及渲染的?
Jan 13 Vue.js
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 Javascript
vue-cli脚手架-bulid下的配置文件
Mar 27 #Javascript
vue2中使用less简易教程
Mar 27 #Javascript
浅谈Vue内置component组件的应用场景
Mar 27 #Javascript
js中apply和Math.max()函数的问题及区别介绍
Mar 27 #Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 #Javascript
Angular使用操作事件指令ng-click传多个参数示例
Mar 27 #Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 #Javascript
You might like
mysql+php分页类(已测)
2008/03/31 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
php验证码实现代码(3种)
2015/09/07 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
许愿墙中用到的函数
2006/10/07 Javascript
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
vue权限问题的完美解决方案
2019/05/08 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
让 python 命令行也可以自动补全
2014/11/30 Python
Python导入txt数据到mysql的方法
2015/04/08 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
python如何实现内容写在图片上
2018/03/23 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
python matlibplot绘制3D图形
2018/07/02 Python
浅谈Python协程
2020/06/17 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
pycharm实现猜数游戏
2020/12/07 Python
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
最新大学生自我评价
2013/09/24 职场文书
大学团支书的自我评价分享
2013/12/14 职场文书
电子信息科学专业自荐信
2014/01/30 职场文书
党支部对照检查材料
2014/08/25 职场文书
暑假学习心得体会
2014/09/02 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
聘用合同范本
2015/09/21 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS