




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Vue組件之間的通信方式詳細(xì)講解目錄前言一、父級(jí)傳數(shù)據(jù)給子級(jí)1、傳輸固定的具體數(shù)據(jù)2、動(dòng)態(tài)語(yǔ)法3、子組件調(diào)用父組件二、子級(jí)傳數(shù)據(jù)給父級(jí)1、使用自定義事件2、$refs的使用3、同級(jí)別組價(jià)以及任意組件之間的數(shù)據(jù)傳遞
前言
在前面,我們已經(jīng)了解了vue的組件以及vue組件之間的層級(jí)關(guān)系,這個(gè)在博主的往期博客,感興趣的可以往前挪,地址是:
1、vue組件
2、vue組件的層級(jí)關(guān)系
本文主要編寫記錄的是,組件之間的通信的模式以及通信的方式,我們的組件之間只能調(diào)用自己的屬性和自己的方法,不能調(diào)用其他組件的屬性以及方法,不過(guò)就是調(diào)用的話,那就是要用到數(shù)據(jù)通信,那樣才能調(diào)用該組件的屬性和方法。
我們的vue組件含有的最突出的是跨組件的數(shù)據(jù)流、自定義的事件通信以及構(gòu)建工具集成的。
一、父級(jí)傳數(shù)據(jù)給子級(jí)
1、傳輸固定的具體數(shù)據(jù)
我們通過(guò)一個(gè)代碼實(shí)例了解,父組件傳遞具體的數(shù)據(jù)給到子組件。
代碼實(shí)例:
!DOCTYPEhtml
htmllang="en"
head
title層級(jí)關(guān)系/title
/head
body
divid="app"
childmsg="**大學(xué)"/child
/div
scriptsrc="/vue/2.2.2/vue.min.js"/script
script
Vponent('child',{
props:['msg'],
template:
`h1{{msg}}學(xué)生教務(wù)系統(tǒng)/h1`
varvm=newVue({
el:"#app",
/script
/body
/html
運(yùn)行結(jié)果:
我們可以看到一個(gè)這樣的界面,當(dāng)在child組件通過(guò)props:[msg]定義了一個(gè)屬性msg,根組件就會(huì)調(diào)用child組件,將屬性msg里面的**大學(xué),把這個(gè)數(shù)據(jù)傳給child組件,所以這個(gè)組件才能顯示出來(lái),因?yàn)檫@個(gè)值是固定的且具體的值,不能被改變的,所以這種方法又稱為字面量傳值。
2、動(dòng)態(tài)語(yǔ)法
動(dòng)態(tài)語(yǔ)法其實(shí)很簡(jiǎn)單,就類似于使用v-bind將html的特性綁定到一個(gè)表達(dá)式中,可以使用v-bind將動(dòng)態(tài)的props綁定到父級(jí)組件的這些數(shù)據(jù)上面。當(dāng)父級(jí)組件的數(shù)據(jù)發(fā)生變化的時(shí)候,就將這一些變化發(fā)送到子組件當(dāng)中。這個(gè)不難理解,我們還是通過(guò)一些代碼來(lái)了解一下:
代碼實(shí)例:
!DOCTYPEhtml
htmllang="en"
head
title組件之間的傳遞/title
/head
body
divid="app"
childv-bind:msg='stage':open='open'/child
/div
scriptsrc="/vue/2.2.2/vue.min.js"/script
script
Vponent('child',{
template:
divh1{{msg}}學(xué)生教務(wù)系統(tǒng)/h1
h2v-show='open'放假了!進(jìn)不了!?。?h2/div`,
props:['msg','open'],
varvm=newVue({
el:"#app",
data:{
stage:"放假",
open:true
/script
/body
/html
運(yùn)行結(jié)果:
我們可以看到child組件當(dāng)中,已經(jīng)定義了msg和open兩個(gè)教務(wù)系統(tǒng)的屬性,在父組件里面已經(jīng)使用了child組件,當(dāng)中使用了v-bind指令來(lái)綁定我們這兩個(gè)屬性,用來(lái)接收來(lái)自父組件的數(shù)據(jù)。我們組件之間可以是props指定驗(yàn)證要求,這個(gè)時(shí)候props得到的值是一個(gè)對(duì)象的值。
3、子組件調(diào)用父組件
這里我們可以解釋到父級(jí)組件調(diào)用我們子組件的時(shí)候通過(guò)綁定事件的時(shí)候,將這個(gè)方法傳遞給子組件,可以將子組件中通過(guò)$emit觸發(fā)這個(gè)事件。這個(gè)還是不難理解,我們可以通過(guò)代碼的方式來(lái)了解:
代碼實(shí)例:
!DOCTYPEhtml
htmllang="en"
head
title組件之間的傳遞/title
/head
body
divid="app"
childv-on:fmethod="show"/child
p{{msg}}/p
/div
templateid="n1"
divbutton@click="myclick"調(diào)用父組件/button/div
/template
scriptsrc="/vue/2.2.2/vue.min.js"/script
script
varclild={
template:"#n1",
methods:{
myclick(){this.$emit('fmethod');}
varvm=newVue({
el:"#app",
data:{msg:""},
methods:{
show(){this.msg="這里是父級(jí)組件的方法";}
components:{child:clild}
/script
/body
/html
運(yùn)行結(jié)果:當(dāng)我們點(diǎn)擊的時(shí)候就可以使得父級(jí)組件的show方法被執(zhí)行的。如下:
二、子級(jí)傳數(shù)據(jù)給父級(jí)
1、使用自定義事件
當(dāng)父級(jí)組件調(diào)用子級(jí)組件的時(shí)候,我們先通過(guò)一個(gè)v-on指令進(jìn)行一個(gè)自定義事件的綁定,在子組件當(dāng)中可以通過(guò)$emit將這個(gè)函數(shù)事件觸發(fā),然后再父級(jí)組件中定義的處理函數(shù)的方法,通過(guò)這樣的傳遞參數(shù)將數(shù)據(jù)傳給父級(jí)組件,這個(gè)還是很簡(jiǎn)單可以理解的,我們通過(guò)代碼示例的方式來(lái)了解我們這一個(gè)定義,
實(shí)例代碼:
!DOCTYPEhtml
htmllang="en"
head
title組件之間的傳遞/title
/head
body
divid="app"
childv-on:fmethod="show"/child
p{{msg}}/p
/div
templateid="n1"
divbutton@click="myclick"調(diào)用父組件的方法/button/div
/template
scriptsrc="/vue/2.2.2/vue.min.js"/script
script
varclild={
template:"#n1",
data:function(){return{msg:"這里是來(lái)自子級(jí)組件的數(shù)據(jù)"}},
methods:{
myclick(){this.$emit('fmethod',this.msg);}
varvm=newVue({
el:"#app",
data:{msg:""},
methods:{
show(data){this.msg=data;}
components:{child:clild}
/script
/body
/html
運(yùn)行結(jié)果:
當(dāng)單擊按鈕的時(shí)候,執(zhí)行myclick的方法,這個(gè)方法中的this.$emit這個(gè)命令就會(huì)觸發(fā)fmethod這個(gè)事件,進(jìn)行調(diào)用父組件里面show顯示這個(gè)方法,再使得this.msg作為實(shí)參傳進(jìn)去。如下:
2、$refs的使用
這個(gè)概念的時(shí)候,我們能知道在調(diào)用子級(jí)組件的時(shí)候使用ref屬性,通過(guò)$refs得到ref的屬性值對(duì)應(yīng)組件的實(shí)例,得到后父級(jí)組件就可以使用子組件,從而控制子組件的數(shù)據(jù),同時(shí)還可以得到子組件的方法,概念很簡(jiǎn)單,我們可以通過(guò)代碼方式了解:
實(shí)例代碼:
!DOCTYPEhtml
htmllang="en"
head
title組件之間的傳遞/title
/head
body
divid="app"
p{{msg}}/pbuttonv-on:click="My_click()"訪問(wèn)子組件的數(shù)據(jù)和方法/button
childref="child1"/child
/div
scriptsrc="/vue/2.2.2/vue.min.js"/script
script
varclild={
template:"#n1",
data:function(){return{msg:"這里是來(lái)自子級(jí)組件的數(shù)據(jù)"}},
methods:{
myclick(){this.$emit('fmethod',this.msg);}
varvm=newVue({
el:"#app",
data:{msg:"根組件data"},
methods:{
My_click(){
console.log(this.$emit.child.msg1);
this.$refs.child.show("已經(jīng)被調(diào)用");
components:{
child:{
template:'p{{msg1}}/p',
data:function(){
return{msg1:"子組件數(shù)據(jù)"}
methods:{
show(data){
console.log("子組件方法"+data)
/script
/body
/html
運(yùn)行結(jié)果:
3、同級(jí)別組價(jià)以及任意組件之間的數(shù)據(jù)傳遞
我們已經(jīng)知道了父子組件之前的數(shù)據(jù)傳遞,那么現(xiàn)在還得了解一下同級(jí)組件,時(shí)間總線可以用于任何組件之間的通信,以便用于來(lái)用解決跨級(jí)別傳遞的方法。
我們?cè)诔绦虼a中,要先定義事件總線,在使用事件總線的傳遞數(shù)據(jù)的兩個(gè)組件中,一個(gè)組件可以使用偵聽時(shí)間;另一個(gè)組件又可以使用觸發(fā)事件。我們還是可以通過(guò)一個(gè)實(shí)例代碼了解一下:
實(shí)例代碼:
!DOCTYPEhtml
htmllang="en"
head
title組件之間的傳遞/title
/head
body
divid="app"
component-one/component-one
component-two/component-two
/div
templateid="n1"
div
我是哥哥,想要獲取到弟弟的數(shù)據(jù):{{msg1}}
/div
/template
templateid="n2"
div
我是弟弟
button@click="send"把弟弟的數(shù)據(jù)傳給哥哥/button
/div
/template
scriptsrc="/vue/2.2.2/vue.min.js"/script
script
varbus=newVue({});
varvm=newVue({
el:"#app",
components:{
"component-one":{
template:'#n1',
data(){
return{msg1:""}
mounted(){
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 消費(fèi)者行為變化對(duì)產(chǎn)業(yè)競(jìng)爭(zhēng)治理的影響
- 軟件開發(fā)過(guò)程與方法論知識(shí)點(diǎn)梳理
- 秋游山間的美景作文12篇
- 桌上的那盆綠植講述一盆植物的成長(zhǎng)故事(7篇)
- 統(tǒng)編人教版三年級(jí)語(yǔ)文下冊(cè)《清明》示范課教學(xué)課件
- 策劃方案安全生產(chǎn)三項(xiàng)行動(dòng)實(shí)施方案
- 氧化工藝證考試題庫(kù)及答案
- 勞務(wù)合同模板(純?nèi)斯?
- 辦公用品采購(gòu)及管理辦法
- 領(lǐng)導(dǎo)力核心要素解析
- 幼兒園課件:《鉛筆不能咬》
- 沒(méi)有斑馬線的馬路課件
- 高三物理一輪復(fù)習(xí)教學(xué)案追擊和相遇問(wèn)題
- 門窗工程掛靠合同書
- 班主任團(tuán)隊(duì)建設(shè)與管理
- 如何做好一名優(yōu)秀的企業(yè)管理者
- 完整word版醫(yī)院信息管理系統(tǒng)測(cè)試報(bào)告
- 新版醫(yī)療器械隨貨同行單模版(共1頁(yè))
- 寧波奉化區(qū)國(guó)有企業(yè)融資及對(duì)外擔(dān)保治理暫行辦法
- 導(dǎo)桿式柴油打樁錘使用說(shuō)明書15p
- 【最新】八年級(jí)物理《熔化和凝固》 人教新課標(biāo)版
評(píng)論
0/150
提交評(píng)論