Vue父子組件傳值的三種方法
提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
前言
例如:Vue的學習是路阻且艱的,這是一個系列文章,幫助vue的新手可以快速上路,創(chuàng)建的自己的項目,該系列文章主要講解作者在vue學習之路上,創(chuàng)建項目中最重要的知識,因為筆者水平有限,希望大家多多指正,該系列文章旨在讓大家感受vue的便捷,詳細學習vue希望大家多多觀看官方文檔.
一、Vue父子傳值的方法
我們在Vue項目進行父子傳值主要有以下三種方法:
(1) props / $emit
(2) $parent / children
(3) $ref
在觀看方法詳解時大家先創(chuàng)建一個父組件parent.vue和一個子組件child.vue并完成父子組件的注冊
二、方法詳解
1.props / $emit
?組件中通過定義props接收?組件中通過v-bind綁定的數(shù)據(jù)
父傳子
首先在父組件中定義一個示例data
import child from './child.vue'
export default {
name:'parent',
components:{
child
},
data(){
return{
parentdata:"This is the first word from parent"
}
}
}在父組件中使用子組件時用v-bind定義一個屬性并將父組件的parentdata傳入
<child :parentdata="parentdata"></child>
在子組件中使用props接收傳入的屬性,并可以直接使用
<template>
<div>
{{parentdata}}
</div>
</template>
<script>
export default {
name:"child",
props:{
parentdata:{
type:String,
default:""
}
}
}
</script>觀看結(jié)果:

父組件傳入子組件的值就被顯示出來了
子傳父
首先在子組件中定義一個事件,并且使用emit發(fā)送給父組件,在示例中子組件使用的click事件觸發(fā)發(fā)送自定義事件(sendmsg)
<template>
<div>
<button @click="childmsg">點我試試</button>
</div>
</template>
<script>
export default {
name:"child",
data(){
return{
msg:"This is the first word from child"
}
},
methods:{
childmsg(){
this.$emit('sendmsg',this.msg)
}
}
}
</script>emit使用方法
this.$emit(‘自定義事件名’,所需要傳的值)
在父組件中需要定義方法(getmsg)接受自定義事件(sendmsg):
<template>
<div>
<child :parentdata="parentdata" @sendmsg="getmsg"></child>
</div>
</template>
<script>
import child from './child.vue'
export default {
name:'parent',
components:{
child
},
methods:{
getmsg(val){
console.log(val)
}
}
}
</script>在定義方法時直接在函數(shù)中設置形參接受子組件傳入的值(getmsg(val))
在控制臺就可以看見打印結(jié)果This is the first word from child
2.$parent / children
在使用這個方法時,大家可以先在父組件中打印出來$children,幫助大家理解
代碼如下
mounted(){
console.log(this.$children)
}可以看到,子組件被打印出來了

只要找到組件對象對應的屬性,就可使用
mounted(){
alert(this.$children[0].msg)
}可以看到結(jié)果

注意,這種方法不僅可以調(diào)用數(shù)據(jù),也可以使用子組件的方法!(但不可以直接調(diào)用,這個接下來的文章再說)
如果是子組件使用父組件的數(shù)據(jù),可以同樣的流程
3.$ref
ref可以讓父組件更加便利地取到想要的子組件,其中原理和第二種方法相同,都是取到組件對象
在父組件中定義ref
<template>
<div>
<child ref="childselected"></child>
</div>
</template>在父組件中取值:
mounted(){
alert(this.$refs.childselected.msg)
}可以看到相同的結(jié)果:

總結(jié)
***本篇主要講解了Vue項目中父子組件傳值的三種方法:
props/$emit
子組件通過v-bind接收父組件的值
父組件通過接收emit發(fā)送的事件接收子組件的值
$parent/children
直接獲取組件對象來取值
$ref
定義屬性名獲取組件對象值
到此這篇關(guān)于Vue父子組件傳值的文章就介紹到這了,更多相關(guān)Vue父子組件傳值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue2+springsecurity權(quán)限系統(tǒng)的實現(xiàn)
本文主要介紹了vue2+springsecurity權(quán)限系統(tǒng)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05
vue項目中在可編輯div光標位置插入內(nèi)容的實現(xiàn)代碼
這篇文章主要介紹了vue項目中在可編輯div光標位置插入內(nèi)容的實現(xiàn)代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2020-01-01
Vite+TS+Vue開啟eslint和prettier規(guī)范及校驗方式
這篇文章主要介紹了Vite+TS+Vue開啟eslint和prettier規(guī)范及校驗方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06

