最近面试,被问到一个题目,vue做一个按钮组件;
当时只是说了一下思路,回来就附上代码。

解决思路:

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

在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.textthis.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。

vue 开发一个按钮组件相关推荐

  1. 基于Vue开发一个日历组件

    最近在做一个类似课程表的需求,需要自制一个日历来支持功能及展现,就顺便研究一下应该怎么开发日历组件. 更新 2.23修复了2026年2月份会渲染多一行的bug,谢谢@深蓝一人童鞋提出的bug,解决方案 ...

  2. Vue 开发一个简略版的飞机大战小游戏

    文章目录 使用 Vue 开发一个简略版的飞机大战小游戏 一.实现思路 二.所需知识点 三.实现步骤 使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,你决 ...

  3. value数字 vue_基于Vue开发数字输入框组件

    随着 vue 越来越火热, 相关组件库也非常多啦, 只用轮子怎么够, 还是要造起来!!! 1.概述 vue组件开发的api:props.events和slots 2.组件代码 效果: (1)index ...

  4. [vue] 使用vue开发一个todo小应用,谈下你的思路

    [vue] 使用vue开发一个todo小应用,谈下你的思路 结构: 输入部分( input )和输出部分( ul ) 逻辑:用户输入之后,通过事件触发拿到用户输入的数据存起来, 将用户数据集合通过 v ...

  5. java计算机毕业设计vue开发一个简单音乐播放器(附源码、数据库)

    java计算机毕业设计vue开发一个简单音乐播放器(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ec ...

  6. pc端签名 vue 生成图片_使用vue实现一个电子签名组件

    使用vue实现一个电子签名组件 在生活中我们使用到电子签名最多的地方可能就是银行了,每次都会让你留下大名.今天我们就要用vue实现一个电子签名的面板 想要绘制图形,第一步想到的就是使用canvas标签 ...

  7. java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计vue开发一个简单音乐播放器源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  8. 使用vue创建一个遮罩组件_用于输入遮罩的另一个Vue组件

    使用vue创建一个遮罩组件 语音输入蒙版 (vue-input-mask) Yet another Vue component for input masking. Based on react-in ...

  9. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

最新文章

  1. linux 物理内存统计,说说free命令  + Linux可用内存统计方法
  2. linux grep命令详解
  3. c++函数内部可以返回函数内部定义的指针 但是不能返回函数内部定义的数组...
  4. Windows下Android平台搭建_1
  5. C# 控制台 模拟时间一秒一秒走动,直到按Esc键,时间静止,退出!
  6. asp.net EF+MVC2实战2
  7. TCP三次握手抓包观察实战篇
  8. bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
  9. 计算机网络上机指导,计算机网络上机指导书.pdf
  10. Qt5学习笔记之图标下载和转换
  11. html 拦截境外ip,网站怎样屏蔽所有国外IP访问? 一个小技巧可以搞定!
  12. 网上交易安全-使用JAVA调用U盾进行客户认证
  13. C语言课程设计日历题目
  14. 大专毕业领导diss我学历低能力差,该怼回去吗?
  15. 微信小程序使用iconfont阿里矢量多色图标
  16. oracle执行语句出无效字符,pl/sql动态执行sql语句时报错:ORA-00911: 无效字符 ORA-06512: 在 line 14...
  17. 无边落木萧萧下,不尽长江滚滚来。
  18. c语言 最小公倍数与最大公因数
  19. 关于Yolov5在测试时,图像大小被调整的问题
  20. 《俊红的数据分析之路》笔记

热门文章

  1. 排除瓶颈和加速django项目
  2. linux实例大全学习笔记1
  3. eclipse执行单元测试报CreateProcess error=87的解决方法
  4. Ubuntu 14.04 LTS 配置 Juno 版 Keystone
  5. 使用Python的twisted和socket模块实现端口的负载分发
  6. JAVA Collection笔记(2012/9/19)
  7. ssas 数据源mysql_BI之SSAS完整实战教程2 -- 开发环境介绍及多维数据集数据源准备...
  8. prometheus之DCGM监控GPU
  9. The pc Register(程序计数器)
  10. 分布式认证需求-统一认证授权