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 相关文章推荐
js操作iframe的一些方法介绍
Jun 25 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
Sep 04 Javascript
基于JavaScript代码实现pc与手机之间的跳转
Dec 23 Javascript
开启BootStrap学习之旅
May 04 Javascript
轮播图组件js代码
Aug 08 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
Sep 18 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
微信小程序CSS3动画下拉菜单效果
Nov 04 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
ES6基础之展开语法(Spread syntax)
Feb 21 Javascript
vue中使用props传值的方法
May 08 Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 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
用php将任何格式视频转为flv的代码
2009/09/03 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
js调试工具console.log()方法查看js代码的执行情况
2014/08/08 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
python实现文件分组复制到不同目录的例子
2014/06/04 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
员工自我鉴定范文
2013/10/06 职场文书
远程教育心得体会
2014/01/03 职场文书
社区工作者先进事迹
2014/01/18 职场文书
文化宣传方案
2014/03/13 职场文书
2014班子成员自我剖析材料思想汇报
2014/10/01 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
人生遥控器观后感
2015/06/11 职场文书