vue3?v-bind="$attrs"繼承組件全部屬性的解決方案
vue3 v-bind=“$attrs” 繼承組件全部屬性
當(dāng)我們在二次封裝element-plus組件時(shí),常常遇到其當(dāng)中組件的屬性過多要不要每個(gè)都拎出來寫一遍的情況,其實(shí)沒必要,v-bind="$attrs"很好的解決了這個(gè)問題,比如我們封裝一下時(shí)間選擇組件代碼如下:
父組件中使用:
<template>
<div>
<m-choose-time
:startOptions="startOptions"
@startChange="startChange"
@endChange="endChange">
</m-choose-time>
</div>
</template>
<script lang='ts' setup>
let startOptions = {
size: 'mini',
clearable: false
}
</script>
<style lang='scss' scoped>
</style>子組件代碼:
<template>
<div style="display: flex;">
<div style="margin-right: 20px;">
<el-time-select
v-model="startTime"
:placeholder="startPlaceholder"
:start="startTimeStart"
:step="startStep"
:end="startTimeEnd"
v-bind="$attrs.startOptions"
></el-time-select>
</div>
<div>
<el-time-select
v-model="endTime"
:min-time="startTime"
:placeholder="endPlaceholder"
:start="endTimeStart"
:step="endStep"
:end="endTimeEnd"
:disabled="endTimeDisabled"
v-bind="$attrs.endOptions"
></el-time-select>
</div>
</div>
</template>
<script lang='ts' setup>
import {ref, watch} from 'vue'
let props = defineProps({
// 開始時(shí)間的占位符
startPlaceholder: {
type: String,
default: '請選擇開始時(shí)間'
},
// 結(jié)束時(shí)間的占位符
endPlaceholder: {
type: String,
default: '請選擇結(jié)束時(shí)間'
},
// 開始時(shí)間的開始選擇
startTimeStart: {
type: String,
default: "08:00"
},
// 開始時(shí)間的步進(jìn)
startStep: {
type: String,
default: "00:30"
},
// 開始時(shí)間的結(jié)束選擇
startTimeEnd: {
type: String,
default: "24:00"
},
// 結(jié)束時(shí)間的開始選擇
endTimeStart: {
type: String,
default: "08:00"
},
// 結(jié)束時(shí)間的步進(jìn)
endStep: {
type: String,
default: "00:30"
},
// 結(jié)束時(shí)間的結(jié)束選擇
endTimeEnd: {
type: String,
default: "24:00"
},
})
let emits = defineEmits(['startChange', 'endChange'])
// 開始時(shí)間
let startTime = ref<string>('')
// 結(jié)束時(shí)間
let endTime = ref<string>('')
// 是否禁用結(jié)束時(shí)間
let endTimeDisabled = ref<boolean>(true)
// 監(jiān)聽開始時(shí)間的變化
watch(() => startTime.value, val => {
if (val === '') {
endTime.value = ''
endTimeDisabled.value = true
}
else {
endTimeDisabled.value = false
// 給父組件分發(fā)事件
emits('startChange', val)
}
})
// 監(jiān)聽結(jié)束時(shí)間的變化
watch(() => endTime.value, val => {
if (val !== '') {
emits('endChange', {
startTime: startTime.value,
endTime: val
})
}
})
</script>
<style lang='scss' scoped>
</style>如上例所示,props中我們只是封裝了el-time-select中的部分屬性,我們在子組件中用的時(shí)候可以傳個(gè)startOptions里面有size和clearable屬性,在封裝是利用v-bind="$attrs.startOptions"就可以很好的繼承啦。當(dāng)然如果不傳startOptions,直接使用v-bind="attrs"是可以繼承所有屬性的
到此這篇關(guān)于vue3 v-bind=“$attrs“ 繼承組件全部屬性的文章就介紹到這了,更多相關(guān)vue3 v-bind=“$attrs“ 繼承組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
antd vue table跨行合并單元格,并且自定義內(nèi)容實(shí)例
這篇文章主要介紹了antd vue table跨行合并單元格,并且自定義內(nèi)容實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Vue使用vux-ui自定義表單驗(yàn)證遇到的問題及解決方法
這篇文章主要介紹了Vue使用vux-ui自定義表單驗(yàn)證遇到的問題及解決方法,需要的朋友可以參考下2018-05-05
關(guān)于VUE點(diǎn)擊父組件按鈕跳轉(zhuǎn)到子組件的問題及解決方案
本文主要介紹了在Vue框架中,如何通過父組件的點(diǎn)擊事件打開子組件中的彈窗并展示表格內(nèi)容,主要步驟包括在父組件中定義數(shù)據(jù)屬性,創(chuàng)建并定義子組件的彈窗和表格內(nèi)容,通過props屬性和自定義事件實(shí)現(xiàn)父子組件間的數(shù)據(jù)傳遞和方法調(diào)用2024-10-10
利用vue組件實(shí)現(xiàn)圖片的拖拽和縮放功能
這篇文章主要給大家介紹了關(guān)于利用vue組件實(shí)現(xiàn)圖片的拖拽和縮放功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
uniapp-ios開發(fā)之App端與webview端相互通信的方法以及注意事項(xiàng)
在uni-app與Webview之間進(jìn)行數(shù)據(jù)交互是非常常見的需求,下面這篇文章主要給大家介紹了關(guān)于uniapp-ios開發(fā)之App端與webview端相互通信的方法以及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2024-07-07
vue項(xiàng)目base64加解密使用方式以及解密亂碼
這篇文章主要介紹了vue項(xiàng)目base64加解密使用方式以及解密亂碼問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
vue3使用vis繪制甘特圖制作timeline可拖動時(shí)間軸及時(shí)間軸中文化(推薦)
這篇文章主要介紹了vue3使用vis繪制甘特圖制作timeline可拖動時(shí)間軸,時(shí)間軸中文化,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02

