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 相关文章推荐
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
js中判断对象是否为空的三种实现方法
Dec 23 Javascript
JS实现弹性菜单效果代码
Sep 07 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
Mar 29 Javascript
jQuery插件实现可输入和自动匹配的下拉框
Oct 24 Javascript
JS实现读取xml内容并输出到div中的方法示例
Apr 19 Javascript
Vue SSR 组件加载问题
May 02 Javascript
关于vue-router的那些事儿
May 23 Javascript
Django+Vue实现WebSocket连接的示例代码
May 28 Javascript
vue-loader中引入模板预处理器的实现
Sep 04 Javascript
OpenLayer学习之自定义测量控件
Sep 28 Javascript
开发一个封装iframe的vue组件
Mar 29 Vue.js
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
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
layui中table表头样式修改方法
2018/08/15 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
浅谈Python中函数的参数传递
2016/06/21 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
利用python写个下载teahour音频的小脚本
2017/05/08 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
如何在python中执行另一个py文件
2020/04/30 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
联想中国官方商城:Lenovo China
2017/10/18 全球购物
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
2014年安全生产责任书
2014/07/22 职场文书
开幕式邀请函
2015/01/31 职场文书
教师师德表现自我评价
2015/03/05 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技