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 相关文章推荐
javascript 表单的友好用户体现
Jan 07 Javascript
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
Mar 17 Javascript
深入探寻seajs的模块化与加载方式
Apr 14 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
Angular CLI 安装和使用教程
Sep 13 Javascript
JavaScript实现百度搜索框效果
Mar 26 Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
Aug 22 Javascript
Puppeteer环境搭建的详细步骤
Sep 21 Javascript
新手简单了解vue
May 29 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
深入浅析NodeJs并发异步的回调处理
2015/12/21 NodeJs
Bootstrap布局方式详解
2016/05/27 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
apicloud拉起小程序并传递参数的方法示例
2018/11/21 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
python进行参数传递的方法
2020/05/12 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
html5 横向滑动导航栏的方法示例
2020/05/08 HTML / CSS
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
《去年的树》教学反思
2014/04/11 职场文书
学生偷窃检讨书
2014/09/25 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书