时间:2021-05-26
最近面试,被问到一个题目,vue做一个按钮组件;
当时只是说了一下思路,回来就附上代码。
解决思路:
在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。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文介绍了vue父子组件的嵌套的示例代码,分享给大家,具体如下:组件的注册:先创建一个构造器varmyComponent=Vue.extend({templat
本文介绍了Vue树形组件的示例代码,分享给大家,具体如下:使用SemanticUI和vue做一个menubar组件,实现方法大概是这样的:0">{{item.t
功能描述:通过点击按钮,可以增减购物数量组件名称是CouterBtn最终效果如下我们使用vue-cli搭建基本的开发环境,这也是最快的进行.vue组件开发的方式
这篇文章分享两个使用ReactHook以及函数式组件开发的简单示例。一个简单的组件案例Button组件应该算是最简单的常用基础组件了吧。我们开发组件的时候期望它
本文实例讲述了vue组件开发原理与实现方法。分享给大家供大家参考,具体如下:概要vue的一个特点是进行组件开发,组件的优势是我们可以封装自己的控件,实现重用,比