vue中各組件之間傳遞數(shù)據(jù)的方法示例
前言
本文主要給大家介紹了關(guān)于vue組件之間傳遞數(shù)據(jù)的相關(guān)資料,分享出來(lái)供大家參考學(xué)習(xí),下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹:
作用域
在vue中,組件實(shí)例的作用域是孤立的,父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。這意味著不能 (也不應(yīng)該) 在子組件的模板內(nèi)直接引用父組件的數(shù)據(jù)。
下面幾種方法可以實(shí)現(xiàn)組件之間數(shù)據(jù)的傳遞。
一、通過(guò)prop傳遞數(shù)據(jù)
1)在子組件中,使用prop屬性,顯示的表明,它所需要的數(shù)據(jù)。
2)在父組件中,需要引用子組件的地方,傳入數(shù)據(jù)。
具體看下面的代碼:
<div id="app"> <my-item :value="value">//傳入數(shù)據(jù),注意引號(hào)里面的為父組件的數(shù)據(jù), </my-item> </div> Vue.component("my-item",{ template:"<div>這是組件,{{value}}</div>", props:["value"],//聲明需要的數(shù)據(jù),HTML 特性是不區(qū)分大小寫(xiě)的,所以此處如果為駝峰命名法,如:myMessage,則在模板中需要轉(zhuǎn)化為用斷線隔開(kāi)的形式:my-Message data:function(){ return { } }, methods:{ } }); //創(chuàng)建vue實(shí)例 const vm=new Vue({ el:"#app", data:{ value:"這是父組件的數(shù)據(jù)", }, methods:{ }, });
這種方法適合父組件向子組件傳遞數(shù)據(jù),可以記為:你先告訴我要什么,然后我給你什么。
注意:這種方式是單向數(shù)據(jù)流,當(dāng)父組件的屬性變化時(shí),將傳導(dǎo)給子組件,但是不會(huì)反過(guò)來(lái)。當(dāng)你想改變prop中數(shù)據(jù)時(shí),可采用如下方法:定義一個(gè)局部變量,并用 prop 的值初始化它,或者使用計(jì)算屬性。
二、通過(guò)自定義事件
自定義事件可以實(shí)現(xiàn)子組件向父組件傳遞數(shù)據(jù),具體方法如下:
1)在子組件中使用$emit(eventName,[...args])
觸發(fā)事件,傳遞數(shù)據(jù)
2)在父組件中$on(eventName,callback)
監(jiān)聽(tīng)事件,接受數(shù)據(jù)作為回調(diào)函數(shù)的參數(shù),并執(zhí)行回調(diào)函數(shù)。
其實(shí)這種方法和angular中控制器之間傳遞數(shù)據(jù)的有點(diǎn)類(lèi)似的。注意觸發(fā)和監(jiān)聽(tīng)事件的事件類(lèi)型必須要保持一致,才可接受導(dǎo)數(shù)據(jù)。具體看下面的例子:
<div id="app"> {{number}} <!-- 在用到子組件的地方監(jiān)聽(tīng),監(jiān)聽(tīng)當(dāng)前實(shí)例上的自定義事件 ,接受參數(shù),并執(zhí)行回調(diào)--> <my-item v-on:cli="totlcli"> </my-item> </div> Vue.component("my-item",{ template:"<button v-on:click='add'>{{count}}</button>", data:function(){ return { count : 0, } }, methods:{ add:function(){ this.count+=1; this.$emit("cli",this.count);//觸發(fā)當(dāng)前實(shí)例上的事件。多個(gè)參數(shù)可以數(shù)組的形式傳遞 } } }); //創(chuàng)建vue實(shí)例 const vm=new Vue({ el:"#app", data:{ number:"" }, methods:{ totlcli:function(num){//這個(gè)回調(diào)在父組件監(jiān)聽(tīng)到事件時(shí),執(zhí)行的,其參數(shù)為觸發(fā)事件時(shí)傳遞的。 return this.number=num; }, }, });
這樣就可以把子組件中的數(shù)據(jù)通過(guò)自定義事件的方式傳到了父組件。
三、使用slot分發(fā)內(nèi)容
主要應(yīng)用場(chǎng)景是,混合父組件的內(nèi)容與子組件自己的模板時(shí)用到。具體使用步驟:
1)在子組件中,使用slot標(biāo)簽作為組件模板之中的內(nèi)容分發(fā)插槽。 <slot> 元素自身將被替換。
2)在父組件中,使用slot屬性,用于標(biāo)記往哪個(gè)slot中插入子組件內(nèi)容。
當(dāng)name相同時(shí),響應(yīng)的內(nèi)容就會(huì)被插入到子組件中去
具體看下面的例子:
<div id="app"> <my-item> <p slot="header">這是頭部</p> <p>這是多余的內(nèi)容,</p> <p slot="footer">這是尾部</p> </my-item> </div> Vue.component("my-item",{ template:"<div>"+ "<header><slot name='header'></slot></header>"+ "<main><slot>備用插槽,當(dāng)沒(méi)有備用內(nèi)容會(huì)顯示出來(lái)</slot></main>"+ "<footer><slot name='footer'></slot></footer>"+ "<div>", props:{ }, data:function(){ return { } } }); const vm=new Vue({ el:"#app", data:{ }, methods:{ }, });
渲染結(jié)構(gòu)如下:
注意:匿名(沒(méi)用name屬性)的slot元素,作為找不到匹配的內(nèi)容片段的備用插槽,即在父組件中沒(méi)有使用slot屬性的內(nèi)容會(huì)在這個(gè)備用插槽顯示。如果沒(méi)有默認(rèn)的 slot,這些找不到匹配的內(nèi)容片段將被拋棄。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- vue父組件向子組件(props)傳遞數(shù)據(jù)的方法
- vuejs動(dòng)態(tài)組件給子組件傳遞數(shù)據(jù)的方法詳解
- vue.js組件之間傳遞數(shù)據(jù)的方法
- vue組件中使用props傳遞數(shù)據(jù)的實(shí)例詳解
- Vue2.x中的父組件傳遞數(shù)據(jù)至子組件的方法
- vue2.0 父組件給子組件傳遞數(shù)據(jù)的方法
- vue組件Prop傳遞數(shù)據(jù)的實(shí)現(xiàn)示例
- vue子組件使用自定義事件向父組件傳遞數(shù)據(jù)
- vue項(xiàng)目中做編輯功能傳遞數(shù)據(jù)時(shí)遇到問(wèn)題的解決方法
- Vue.js組件使用props傳遞數(shù)據(jù)的方法
相關(guān)文章
詳解如何在Vue3使用<script lang=“ts“ setup>語(yǔ)法糖
本文主要介紹了在Vue3使用<script lang=“ts“ setup>語(yǔ)法糖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06如何使用vue開(kāi)發(fā)公眾號(hào)網(wǎng)頁(yè)
因?yàn)轫?xiàng)目需要,近期做了一個(gè)公眾號(hào)網(wǎng)頁(yè)開(kāi)發(fā)。在此期間也踩了一些坑,解決這些坑之后,準(zhǔn)備對(duì)這個(gè)項(xiàng)目進(jìn)行復(fù)盤(pán)。記錄下項(xiàng)目從開(kāi)發(fā)到上線所解決的問(wèn)題,并對(duì)使用vue進(jìn)行公眾號(hào)開(kāi)發(fā)的步驟進(jìn)行一個(gè)總結(jié)。方便以后有問(wèn)題進(jìn)行查閱。希望對(duì)你有所幫助2021-05-05Vue實(shí)現(xiàn)可移動(dòng)水平時(shí)間軸
這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)可移動(dòng)水平時(shí)間軸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06Vue2.0實(shí)現(xiàn)調(diào)用攝像頭進(jìn)行拍照功能 exif.js實(shí)現(xiàn)圖片上傳功能
這篇文章主要為大家詳細(xì)介紹了Vue2.0實(shí)現(xiàn)調(diào)用攝像頭進(jìn)行拍照功能,以及圖片上傳功能引用exif.js,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04vue中多路由表頭吸頂實(shí)現(xiàn)的幾種布局方式
這篇文章主要介紹了vue項(xiàng)目多路由表頭吸頂實(shí)現(xiàn)的幾種布局方式,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04vue全局實(shí)現(xiàn)數(shù)字千位分隔符格式
這篇文章主要為大家詳細(xì)介紹了vue全局實(shí)現(xiàn)數(shù)字千位分隔符格式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10Vue淺析講解動(dòng)態(tài)組件與緩存組件及異步組件的使用
這篇文章主要介紹了Vue開(kāi)發(fā)中的動(dòng)態(tài)組件與緩存組件及異步組件的使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09