您好,登錄后才能下訂單哦!
這篇文章主要介紹了vue3中組件間怎么傳值的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇vue3中組件間怎么傳值文章都會有所收獲,下面我們一起來看看吧。
在父組件中:
1.引入ref
2.定義要傳遞的屬性和屬性值
3.向vue頁面中的子組件傳遞該屬性屬性
傳遞屬性
:傳給子組件的名字(自定義) = “對應定義在父組件的屬性名”
在子組件中:
4.接收父組件傳來的屬性
props: { showDialogVisible: Boolean }, setup() { return { } }
5.注冊該組件
setup(props) { // 可以打印查看一下props傳過來的屬性以及屬性的值 console.log(props); return { props } }
6.在子組件的頁面使用該屬性
父組件向子組件傳值完成!
在子組件中:
由于vue數據傳遞是單向數據流,子組件沒有權利修改父組件傳過來的數據,只能請求父組件對原始數據進行修改,用emit 通知父組件去修改。
1.在子組件中定義要修改父組件那個屬性(或方法)的值
setup(props,context) { context.emit('setShow', false); return { } } //也可以:es6解構賦值取到emit //setup(props,{emit}) { // emit('setShow', false); // // return { // } //}
context.emit(‘傳入父組件自定義的屬性名’, 屬性值);
在父組件中:
2.再頁面接收子組件中傳入的自定義屬性名,綁定在自身對應的屬性(方法)上
父組件向子組件傳值完成!
附上我的父組件方法:
如果子組件向父組件傳的值正好是父組件向子組件傳的值,可以直接在該屬性上進行雙向綁定。
注:閱讀此小節建議先看完第一節:父組件向子組件傳值
在子組件上:
1.直接修改從props中拿到的屬性
在父組件上:
2.在父頁面中的子組件上進行綁定
傳值完成!
這篇文章前自己也網上找了資料,發現這塊資料極少,所以還是自己記錄一下
項目需求是每個頁面需要加上頂部導航欄,加返回事件
先寫子組件代碼,在components目錄下建一個nav.vue文件:
子組件nav.vue文件內容
<template> <div> <el-affix position="top" :offset="0"> <div class="nav"> <span @click="backGo"><img src="../assets/back.png"/>返回</span> <p>{{title}}</p> </div> </el-affix> </div> </template> <script setup> import{ defineProps } from "vue" const props =defineProps({ //子組件定義接收父組件傳過來的值 title:String }) //點擊返回事件 const backGo = () => { history.back() } </script> <style scoped> .nav{width: 100%;height:.6rem;display: flex;align-items: center;justify-content: center;text-align: center;position: relative;background-color: #ffffff;border-bottom: 1px solid #f0f0f0;} .nav span{position: absolute;height:100%;left: .2rem;top: 0;display: flex;align-items: center;color: #8a8a8a;} .nav span img{width: .32rem;} </style>
父組件aboutus.vue文件:
<template> <div class="wrap"> <Nav title="關于我們"></Nav> <!--記住這里第一個字母大寫哦--> <div class="lists"> <ul class="abus"> <li><p><router-link to="/company">公司介紹</router-link></p></li> <li><p><router-link to="/privacy">隱私政策</router-link></p></li> <li><p><router-link to="/useragree">用戶協議</router-link></p></li> </ul> </div> </div> </template> <script setup> import Nav from '@/components/nav.vue' </script>
記住引入子組件時,第一個字母大寫哦 !
是不是很簡單!
同樣是拿子組件nav.vue來測試,直接上代碼:
<template> <div> <el-affix position="top" :offset="0"> <div class="nav"> <span @click="backGo"><img src="../assets/back.png"/>返回</span> <p>{{title}}</p> </div> </el-affix> </div> </template> <script setup> import{ defineProps ,defineEmits} from "vue" const emits =defineEmits(['getBackGo']) //注冊父組件回調方法 const props =defineProps({ title:String }) const backGo = () => { // history.back() emits("getBackGo","傳個值給父組件!") } </script> <style scoped> .nav{width: 100%;height:.6rem;display: flex;align-items: center;justify-content: center;text-align: center;position: relative;background-color: #ffffff;border-bottom: 1px solid #f0f0f0;} .nav span{position: absolute;height:100%;left: .2rem;top: 0;display: flex;align-items: center;color: #8a8a8a;} .nav span img{width: .32rem;} </style>
來看看父組件aboutus.vue寫法:
<template> <div class="wrap"> <Nav title="關于我們" @getBackGo="getBackGoInfo"></Nav> <img src="../../assets/logo.jpg" class="logo"/> <div class="lists"> <ul class="abus"> <li><p><router-link to="/company">公司介紹</router-link></p></li> <li><p><router-link to="/privacy">隱私政策</router-link></p></li> <li><p><router-link to="/useragree">用戶協議</router-link></p></li> </ul> </div> </div> </template> <script setup> import Nav from '@/components/nav.vue' const getBackGoInfo = (value) => { console.log(value) } </script>
效果如下:
關于“vue3中組件間怎么傳值”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“vue3中組件間怎么傳值”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。