vue 開發(fā)一個(gè)按鈕組件的示例代碼
最近面試,被問到一個(gè)題目,vue做一個(gè)按鈕組件;
當(dāng)時(shí)只是說了一下思路,回來就附上代碼。
解決思路:
- 通過父子組件通訊($refs 和 props)
- props接受參數(shù), $refs調(diào)用子組件的方法
- 來達(dá)到點(diǎn)擊提交改變按鈕狀態(tài),如果不成功則取消按鈕狀態(tài)
在src/components/ 下建一個(gè)button.vue
<template>
<!-- use plane -->
<!-- 傳入bgColor改變按鈕背景色 -->
<!-- state切換button的狀態(tài) 調(diào)用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: '確認(rèn)',
}
}
}
},
methods: {
confirm(){
this.text += '...'
this.state = true
//這里是激活父組件的事件,因?yàn)樽咏M件是不會(huì)冒泡到父組件上的,必須手動(dòng)調(diào)用$emit
//相對應(yīng)父組件要在調(diào)用該組件的時(shí)候,將其掛載到上面
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>
在頁面中調(diào)用:
<template>
<div class="btn-box">
<Btn
:btnData="{text: '確認(rèn)注冊'}"
<!--這里就要掛載$emit調(diào)用的事件 @confirm="想要調(diào)用事件的名字"-->
@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>
在這里,要注意一些細(xì)節(jié):
1. button組件形成之后和其它div元素的間距,如果是在組件內(nèi)定死是很難復(fù)用的。
2. 在復(fù)用的時(shí)候,在父組件中是改變不了子組件的樣式的,如果要強(qiáng)制更改,單獨(dú)寫一個(gè)并去掉scoped。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用vue cli4.x搭建vue項(xiàng)目的過程詳解
這篇文章主要介紹了使用vue cli4.x搭建vue項(xiàng)目的過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
vite+vue3+ts項(xiàng)目中提示無法找到模塊的問題及解決
這篇文章主要介紹了vite+vue3+ts項(xiàng)目中提示無法找到模塊的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
vue-cli-service和webpack-dev-server的區(qū)別及說明
這篇文章主要介紹了vue-cli-service和webpack-dev-server的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10

