Vue父子組件傳值的三種方法
提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
前言
例如:Vue的學(xué)習(xí)是路阻且艱的,這是一個(gè)系列文章,幫助vue的新手可以快速上路,創(chuàng)建的自己的項(xiàng)目,該系列文章主要講解作者在vue學(xué)習(xí)之路上,創(chuàng)建項(xiàng)目中最重要的知識(shí),因?yàn)楣P者水平有限,希望大家多多指正,該系列文章旨在讓大家感受vue的便捷,詳細(xì)學(xué)習(xí)vue希望大家多多觀看官方文檔.
一、Vue父子傳值的方法
我們?cè)赩ue項(xiàng)目進(jìn)行父子傳值主要有以下三種方法:
(1) props / $emit
(2) $parent / children
(3) $ref
在觀看方法詳解時(shí)大家先創(chuàng)建一個(gè)父組件parent.vue和一個(gè)子組件child.vue并完成父子組件的注冊(cè)
二、方法詳解
1.props / $emit
?組件中通過定義props接收?組件中通過v-bind綁定的數(shù)據(jù)
父?jìng)髯?/strong>
首先在父組件中定義一個(gè)示例data
import child from './child.vue' export default { name:'parent', components:{ child }, data(){ return{ parentdata:"This is the first word from parent" } } }
在父組件中使用子組件時(shí)用v-bind定義一個(gè)屬性并將父組件的parentdata傳入
<child :parentdata="parentdata"></child>
在子組件中使用props接收傳入的屬性,并可以直接使用
<template> <div> {{parentdata}} </div> </template> <script> export default { name:"child", props:{ parentdata:{ type:String, default:"" } } } </script>
觀看結(jié)果:
父組件傳入子組件的值就被顯示出來了
子傳父
首先在子組件中定義一個(gè)事件,并且使用emit發(fā)送給父組件,在示例中子組件使用的click事件觸發(fā)發(fā)送自定義事件(sendmsg)
<template> <div> <button @click="childmsg">點(diǎn)我試試</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í)直接在函數(shù)中設(shè)置形參接受子組件傳入的值(getmsg(val))
在控制臺(tái)就可以看見打印結(jié)果This is the first word from child
2.$parent / children
在使用這個(gè)方法時(shí),大家可以先在父組件中打印出來$children,幫助大家理解
代碼如下
mounted(){ console.log(this.$children) }
可以看到,子組件被打印出來了
只要找到組件對(duì)象對(duì)應(yīng)的屬性,就可使用
mounted(){ alert(this.$children[0].msg) }
可以看到結(jié)果
注意,這種方法不僅可以調(diào)用數(shù)據(jù),也可以使用子組件的方法!(但不可以直接調(diào)用,這個(gè)接下來的文章再說)
如果是子組件使用父組件的數(shù)據(jù),可以同樣的流程
3.$ref
ref可以讓父組件更加便利地取到想要的子組件,其中原理和第二種方法相同,都是取到組件對(duì)象
在父組件中定義ref
<template> <div> <child ref="childselected"></child> </div> </template>
在父組件中取值:
mounted(){ alert(this.$refs.childselected.msg) }
可以看到相同的結(jié)果:
總結(jié)
***本篇主要講解了Vue項(xiàng)目中父子組件傳值的三種方法:
props/$emit
子組件通過v-bind接收父組件的值
父組件通過接收emit發(fā)送的事件接收子組件的值
$parent/children
直接獲取組件對(duì)象來取值
$ref
定義屬性名獲取組件對(duì)象值
到此這篇關(guān)于Vue父子組件傳值的文章就介紹到這了,更多相關(guān)Vue父子組件傳值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-draggable實(shí)現(xiàn)pc端拖拽效果
這篇文章主要為大家詳細(xì)介紹了vue-draggable實(shí)現(xiàn)pc端拖拽效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04vue2+springsecurity權(quán)限系統(tǒng)的實(shí)現(xiàn)
本文主要介紹了vue2+springsecurity權(quán)限系統(tǒng)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05vue3.0 搭建項(xiàng)目總結(jié)(詳細(xì)步驟)
這篇文章主要介紹了vue3.0 搭建項(xiàng)目總結(jié)(詳細(xì)步驟),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05vue項(xiàng)目中在可編輯div光標(biāo)位置插入內(nèi)容的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue項(xiàng)目中在可編輯div光標(biāo)位置插入內(nèi)容的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01Vite+TS+Vue開啟eslint和prettier規(guī)范及校驗(yàn)方式
這篇文章主要介紹了Vite+TS+Vue開啟eslint和prettier規(guī)范及校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06