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源码分析-01总体架构分析
Nov 14 Javascript
一个简单的弹性返回顶部JS代码实现介绍
Jun 09 Javascript
JavaScript和CSS通过expression实现Table居中显示
Jun 28 Javascript
百度判断手机终端并自动跳转js代码及使用实例
Jun 11 Javascript
JavaScript中常见的字符串操作函数及用法汇总
May 04 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
Aug 15 Javascript
vue组件学习教程
Sep 09 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
spring+angular实现导出excel的实现代码
Feb 27 Javascript
vue 解决数组赋值无法渲染在页面的问题
Oct 28 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 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
Protoss建筑一览
2020/03/14 星际争霸
php读取文件内容的方法汇总
2015/01/24 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP的Laravel框架结合MySQL与Redis数据库的使用部署
2016/03/21 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
Jquery技巧(必须掌握)
2016/03/16 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
vue穿梭框实现上下移动
2021/01/29 Vue.js
Python标准库os.path包、glob包使用实例
2014/11/25 Python
Python常用随机数与随机字符串方法实例
2015/04/09 Python
Django中模型Model添加JSON类型字段的方法
2015/06/17 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
Python实现学生成绩管理系统
2020/04/05 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
计算机毕业大学生推荐信
2013/12/01 职场文书
学生出入校管理制度
2014/01/16 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
大学班干部竞选稿
2015/11/20 职场文书
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL