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

作者:绯色琉璃 时间:2024-04-30 10:27:40 

最近面试,被问到一个题目,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。

来源:https://segmentfault.com/a/1190000014015962

标签:vue,按钮
0
投稿

猜你喜欢

  • 简单学习Python time模块

    2021-04-24 00:18:53
  • Python搭建APNS苹果推送通知推送服务的相关模块使用指南

    2021-09-27 22:12:59
  • JS逆序遍历实现代码

    2023-10-11 07:31:49
  • python实现批量转换文件编码(批转换编码示例)

    2023-07-28 22:03:47
  • Python制作豆瓣图片的爬虫

    2021-11-24 05:53:05
  • Python设计模式中的策略模式详解

    2023-09-03 09:26:26
  • MySQL之mysqldump的使用详解

    2024-01-25 10:53:07
  • Python去除字符串前后空格的三种方法汇总

    2023-04-18 22:40:57
  • asp程序错误详细说明例表

    2008-04-02 12:13:00
  • ASP表单验证方法总结

    2007-10-06 22:43:00
  • CSS背景属性5个应用实例

    2009-09-13 20:54:00
  • 简单讲解Go程序中使用MySQL的方法

    2024-01-24 00:02:56
  • 微信小程序实现简单倒计时功能

    2024-04-17 10:23:27
  • python 中的 asyncio 异步协程

    2022-09-15 12:30:53
  • 运用python去除图片水印

    2021-05-06 10:54:20
  • Django实战之用户认证(用户登录与注销)

    2023-03-23 16:52:26
  • python 读取串口数据的示例

    2021-08-30 11:10:26
  • python绘制箱型图

    2022-10-11 21:33:20
  • Mysql启动的方式(四种)

    2024-01-28 02:38:53
  • sql 判断函数、存储过程是否存在的代码整理

    2024-01-28 20:09:53
  • asp之家 网络编程 m.aspxhome.com