Vue父子組件屬性傳遞實(shí)現(xiàn)方法詳解
前言
這節(jié)我們主要從案例出發(fā),用Vue3
的寫法寫父子組件之間的屬性傳遞。
組件之間屬性的傳遞
我們定義一個(gè)Rate
組件,具有以下功能:
- 接收來自外部組件傳入的參數(shù),
starCount
代表星星個(gè)數(shù)。color
代表星星顏色。 - 需要根據(jù)傳入星星的個(gè)數(shù),展示對(duì)應(yīng)數(shù)量的星星。
父組件傳遞屬性給子組件
那么在編寫組件的時(shí)候,我們需要注意什么?
- 我們可以使用
defineProps
來規(guī)范傳遞數(shù)據(jù)的格式??梢越Y(jié)合withDefaults
來進(jìn)行默認(rèn)值的賦值。 - 如果是響應(yīng)式數(shù)據(jù)的傳遞,在傳遞給子組件的時(shí)候,需要添加前綴
:
。如果是常量,則不用。
我們在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來包裝 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>
最終效果如下:
子組件傳遞屬性給父組件
我們在編寫組件的時(shí)候,我們需要注意什么?
- 子組件:需要通過
defineEmits
函數(shù),注冊一個(gè)自定義事件或者其他事件,例如click
事件。然后手動(dòng)觸發(fā)emit
函數(shù),調(diào)用該自定義事件,并傳遞參數(shù)。 - 父組件:引用子組件的時(shí)候,通過
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注冊一個(gè)自定義事件 const emit = defineEmits(["getValue"]); // 點(diǎn)擊事件觸發(fā)emit,去調(diào)用我們注冊的自定義事件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)文章
Vue中使用crypto-js AES對(duì)稱加密算法實(shí)現(xiàn)加密解密
?在數(shù)字加密算法中,通過可劃分為對(duì)稱加密和非對(duì)稱加密,本文主要介紹了Vue中使用crypto-js AES對(duì)稱加密算法實(shí)現(xiàn)加密解密,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03vue文件上傳Required request part ‘file‘ is&n
這篇文章主要介紹了vue文件上傳Required request part ‘file‘ is not present問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11vue3實(shí)現(xiàn)圖片縮放拖拽功能的示例代碼
v3-drag-zoom 是基于 vue3 開發(fā)的一個(gè)縮放拖拽組件,方便開發(fā)者快速實(shí)現(xiàn)縮放拖拽功能,效果類似地圖的縮放與拖拽,本文給大家介紹了vue3如何快速實(shí)現(xiàn)圖片縮放拖拽功能,感興趣的朋友可以參考下2024-04-04vue+elementUI實(shí)現(xiàn)簡單日歷功能
這篇文章主要為大家詳細(xì)介紹了vue+elementUI實(shí)現(xiàn)簡單日歷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09