Vue父子組件屬性傳遞實(shí)現(xiàn)方法詳解
前言
這節(jié)我們主要從案例出發(fā),用Vue3的寫法寫父子組件之間的屬性傳遞。
組件之間屬性的傳遞
我們定義一個(gè)Rate組件,具有以下功能:
- 接收來(lái)自外部組件傳入的參數(shù),
starCount代表星星個(gè)數(shù)。color代表星星顏色。 - 需要根據(jù)傳入星星的個(gè)數(shù),展示對(duì)應(yīng)數(shù)量的星星。
父組件傳遞屬性給子組件
那么在編寫組件的時(shí)候,我們需要注意什么?
- 我們可以使用
defineProps來(lái)規(guī)范傳遞數(shù)據(jù)的格式??梢越Y(jié)合withDefaults來(lái)進(jìn)行默認(rèn)值的賦值。 - 如果是響應(yīng)式數(shù)據(jù)的傳遞,在傳遞給子組件的時(shí)候,需要添加前綴
:。如果是常量,則不用。
我們?cè)?code>components目錄下創(chuàng)建完Rate.ts文件后。完整代碼如下:
<template>
<div :style="fontstyle">
{{ rate }}
</div>
</template>
<script setup lang="ts">
import { computed, defineProps, withDefaults } from "vue";
// 定義父組件傳入的參數(shù)類型
interface Props {
starCount: number;
color: string;
}
// 規(guī)定傳值類型以及賦上默認(rèn)值
let props = withDefaults(defineProps<Props>(), {
starCount: 0,
color: "blue",
});
// 凡是計(jì)算有關(guān)的,我們都用computed來(lái)包裝
const rate = computed(() =>
"★★★★★☆☆☆☆☆".slice(5 - props.starCount, 10 - props.starCount)
);
const fontstyle = computed(() => {
return `color:${props.color};`;
});
</script>
外部組件調(diào)用如下:
<template> <Rate starCount="3"></Rate> <Rate starCount="4" color="red"></Rate> <Rate starCount="1" color="green"></Rate> </template> <script setup> import Rate from "./components/Rate.vue"; </script>
最終效果如下:

子組件傳遞屬性給父組件
我們?cè)诰帉懡M件的時(shí)候,我們需要注意什么?
- 子組件:需要通過(guò)
defineEmits函數(shù),注冊(cè)一個(gè)自定義事件或者其他事件,例如click事件。然后手動(dòng)觸發(fā)emit函數(shù),調(diào)用該自定義事件,并傳遞參數(shù)。 - 父組件:引用子組件的時(shí)候,通過(guò)
v-on綁定一個(gè)函數(shù),指向子組件里面定義的事件。注意:v-on的效果等同于@符號(hào)。
定義一個(gè)子組件Son:
<template>
<div style="margin: 10px; border: 2px solid red">
我是子組件
<button @click="transValue" style="margin: 5px;background:#caca88">傳值給父組件</button>
</div>
</template>
<script setup lang="ts">
import { ref } from "vue";
// 定義所要傳給父組件的值
const num = ref<number>(0);
// 使用defineEmits注冊(cè)一個(gè)自定義事件
const emit = defineEmits(["getValue"]);
// 點(diǎn)擊事件觸發(fā)emit,去調(diào)用我們注冊(cè)的自定義事件getValue,并傳遞value參數(shù)至父組件
const transValue = () => {
num.value++;
emit("getValue", num.value);
};
</script>
父組件Father:
<template>
<div class="fa">
<div style="margin: 10px;">我是父組件</div>
父組件接收子組件傳的值:{{sonMessage}}
<Son @getValue="getSonValue"></Son>
<!-- <Son v-on:getValue="getSonValue"></Son> -->
</div>
</template>
<script setup lang="ts">
import Son from './Son.vue'
import {ref} from "vue";
const sonMessage = ref<String>('0')
const getSonValue = (value: String) => {
sonMessage.value = value
}
</script>
<style scoped>
.fa{
border: 3px solid cornflowerblue;
width: 400px;
text-align: center;
}
</style>
運(yùn)行效果如下:

到此這篇關(guān)于Vue父子組件屬性傳遞實(shí)現(xiàn)方法詳解的文章就介紹到這了,更多相關(guān)Vue父子組件屬性傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3+element-plus 實(shí)現(xiàn)動(dòng)態(tài)菜單和動(dòng)態(tài)路由的渲染的項(xiàng)目實(shí)踐
本文主要介紹了vue3+element-plus 實(shí)現(xiàn)動(dòng)態(tài)菜單和動(dòng)態(tài)路由的渲染的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
vue3源碼分析reactivity實(shí)現(xiàn)原理
這篇文章主要為大家介紹了vue3源碼分析reactivity實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Vue ECharts餅圖實(shí)現(xiàn)方法詳解
這篇文章主要介紹了在vue.js中,使用echarts組件,創(chuàng)建一個(gè)餅圖,并且獲取餅圖的數(shù)據(jù)和屬性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12
VUE識(shí)別訪問(wèn)設(shè)備是pc端還是移動(dòng)端的實(shí)現(xiàn)步驟
經(jīng)常在項(xiàng)目中會(huì)有支持pc與手機(jī)端需求,并且pc與手機(jī)端是兩個(gè)不一樣的頁(yè)面,這時(shí)就要求判斷設(shè)置,下面這篇文章主要給大家介紹了關(guān)于VUE識(shí)別訪問(wèn)設(shè)備是pc端還是移動(dòng)端的相關(guān)資料,需要的朋友可以參考下2023-05-05
使用Vue-Awesome-Swiper實(shí)現(xiàn)旋轉(zhuǎn)疊加輪播效果&平移輪播效果
這篇文章主要介紹了用Vue-Awesome-Swiper實(shí)現(xiàn)旋轉(zhuǎn)疊加輪播效果&平移輪播效果,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值需要的朋友可以參考下2019-08-08
vue-cli 3.0 引入mint-ui報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了vue-cli 3.0 引入mint-ui報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

