Vue3+Ts實現(xiàn)父子組件間傳值的兩種方式
概覽:
方式 | 特點 |
---|---|
v-model + emit | 簡單明了,無復(fù)雜操作時使用 |
v-bind + emit | 功能齊全,使用麻煩,推薦數(shù)據(jù)處理較多時使用 |
1、v-model+emit傳值
說明:v-model數(shù)據(jù)雙向綁定的指令。
1.1父向子傳遞數(shù)據(jù)
1.父組件引入子組件;
2.使用v-mode
l綁定一個引入子組件的屬性(如:num);
3.子組件中使用defineProps
接收。
1.2子向父傳遞數(shù)據(jù)
1.聲明defineEmites
;
2.在defineEmits
中聲明(event: 'update:num', n: number): void
;
3.進行事件觸發(fā)執(zhí)行emit('update:num', 40)
代碼示例:
// 父組件 <template> <div> <div> <div> 父組件 {{ num1 }}</div> <button @click="add">父按鈕</button> </div> <!-- v-model的傳值 --> <Child v-model:num="num1"></Child> </div> </template> <script setup lang="ts"> import Child from './02-AppChild.vue' import { ref } from 'vue' let num1 = ref(20) const add = () => { num1.value++ } </script> <style scoped></style>
//子組件 <template> <div> <div>子組件{{ num }}</div> <div>{{ n }}</div> <button @click="hdClick">按鈕</button> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; let props = defineProps({ num: { type: Number, default: 100 } }) const emit = defineEmits<{ // update:固定寫法,后面的變量是父組件中v-model:后面的這個變量 (event: 'update:num', n: number): void }>() let n = ref(props.num) const hdClick = () => { // emit(上面event的值,要修改成的值) emit('update:num', n.value+=10) } </script> <style scoped></style>
效果圖:
2、使用v-bind+emit
說明:v-bind非雙向數(shù)據(jù)綁定,子組件傳來的數(shù)據(jù)需要進行賦值。
2.1父向子傳遞數(shù)據(jù)
1.父組件引入子組件;
2.使用v-bind
l綁定一個引入子組件的屬性(如:num);
3.子組件中使用defineProps
接收。
2.2子向父傳遞數(shù)據(jù)
1.聲明defineEmites
;
2.在defineEmits
中聲明(event: 'fn', n: number): void
;
3.進行事件觸發(fā)執(zhí)行emit('fn',num3.value)
4.父組件中@fn
對應(yīng)的chanNum
接收參數(shù)并賦值。
代碼示例:
// 父組件 <template> <div> <!-- 父組件 --> <p>{{ num1 }}</p> <p>{{ num3 }}</p> <button @click="add">父按鈕</button> <Child :num="num1" @fn="chanNum"></Child> </div> </template> <script setup lang="ts"> import Child from "./11-AppChild.vue"; import { ref } from "vue"; let num1 = ref(10) let num3 = ref(0) const chanNum = (num33:number) => { num3.value=num33 } const add = () => { num1.value++ } </script> <style scoped></style>
// 子組件 <template> <div> <!-- 子組件 --> <p>{{ num }}</p> <p>{{ num3 }}</p> <button @click="hdClick">按鈕</button> </div> </template> <script setup lang="ts"> import { ref } from "vue"; defineProps({ num: { type: Number, default: 30 } }) let num3=ref(30) // 子傳父的時候需要先定義好emit這個方法 const emit = defineEmits<{ //fn為父組件引入子組件是定義的子組件事件屬性,可隨意定義 (event: 'fn', n: number): void }>() const hdClick = () => { // vue2通過$emit("自定義事件名",參數(shù)) num3.value+=2 emit('fn',num3.value) } </script> <style scoped></style>
效果圖:
總結(jié)
- 父向子組件傳參兩中方式并沒有太大區(qū)別,只是在引用子組件聲明屬性的時候一個是v-model一個是v-bind,在接收參數(shù)的時候則完全相同。
- 對于子組件向父組件傳參則大為不同,v-model方式下父組件僅能單調(diào)的接收子組件傳來的參數(shù)不能對傳來的數(shù)據(jù)進行任何操作。除非單獨另寫邏輯進行處理。而v-bind方式下父組件在接收到子組件傳來參數(shù)的同時能在聲明的方法中對傳來的數(shù)據(jù)和父組件本身的數(shù)據(jù)進行任意處理。
以上就是Vue3+Ts實現(xiàn)父子組件間傳值的兩種方式的詳細內(nèi)容,更多關(guān)于Vue3+Ts父子組件間傳值的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue + Electron 制作桌面應(yīng)用的示例代碼
這篇文章主要介紹了vue + Electron 制作桌面應(yīng)用,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11基于Vue2實現(xiàn)的仿手機QQ單頁面應(yīng)用功能(接入聊天機器人 )
這篇文章主要介紹了基于Vue2實現(xiàn)的仿手機QQ單頁面應(yīng)用功能(接入聊天機器人 ),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03Vue echarts模擬后端數(shù)據(jù)流程詳解
在平常的項目中,echarts圖表我們也是使用的非常多的,通常我們從后端拿到數(shù)據(jù),需要在圖表上動態(tài)的進行呈現(xiàn),接下來我們就模擬從后端獲取數(shù)據(jù)然后進行呈現(xiàn)的方法2022-09-09Vue3中的setup語法糖、computed函數(shù)、watch函數(shù)詳解
這篇文章主要介紹了Vue3中的setup語法糖、computed函數(shù)、watch函數(shù),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03