vue3?v-bind="$attrs"繼承組件全部屬性的解決方案
vue3 v-bind=“$attrs” 繼承組件全部屬性
當(dāng)我們?cè)诙畏庋belement-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: '請(qǐng)選擇開始時(shí)間'
},
// 結(jié)束時(shí)間的占位符
endPlaceholder: {
type: String,
default: '請(qǐng)選擇結(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中的部分屬性,我們?cè)谧咏M件中用的時(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-router history模式服務(wù)器端配置過程記錄
vue路由有hash和history兩種模式,這篇文章主要給大家介紹了關(guān)于vue-router history模式服務(wù)器端配置的相關(guān)資料,需要的朋友可以參考下2021-06-06
詳解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
這篇文章主要介紹了詳解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
vue點(diǎn)擊Dashboard不同內(nèi)容 跳轉(zhuǎn)到同一表格的實(shí)例
這篇文章主要介紹了vue點(diǎn)擊Dashboard不同內(nèi)容 跳轉(zhuǎn)到同一表格的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
詳解auto-vue-file:一個(gè)自動(dòng)創(chuàng)建vue組件的包
這篇文章主要介紹了auto-vue-file:一個(gè)自動(dòng)創(chuàng)建vue組件的包,需要的朋友可以參考下2019-04-04
Element的穿梭框數(shù)據(jù)量大時(shí)點(diǎn)擊全選卡頓的解決方案
本文主要介紹了Element的穿梭框數(shù)據(jù)量大時(shí)點(diǎn)擊全選卡頓的解決方案,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
vue中關(guān)于template報(bào)錯(cuò)等問題的解決
這篇文章主要介紹了vue中關(guān)于template報(bào)錯(cuò)等問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue中watch監(jiān)聽路由傳來的參數(shù)變化問題
這篇文章主要介紹了vue中watch監(jiān)聽路由傳來的參數(shù)變化,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
vue3+arco design通過動(dòng)態(tài)表單方式實(shí)現(xiàn)自定義篩選功能
這篇文章主要介紹了vue3+arco design通過動(dòng)態(tài)表單方式實(shí)現(xiàn)自定義篩選,本文主要實(shí)現(xiàn)通過動(dòng)態(tài)表單的方式實(shí)現(xiàn)自定義篩選的功能,用戶可以自己添加篩選的項(xiàng)目,篩選條件及篩選內(nèi)容,需要的朋友可以參考下2024-05-05

