最近面試,被問(wèn)到一個(gè)題目,vue做一個(gè)按鈕組件;
當(dāng)時(shí)只是說(shuō)了一下思路,回來(lá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 //相對(duì)應(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>
在頁(yè)面中調(diào)用:
<template> <div class="btn-box"> <Btn :btnData="{text: '確認(rèn)注冊(cè)'}" <!--這里就要掛載$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ú)寫(xiě)一個(gè)并去掉scoped。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注