摘要:在父組件中,需要引用子組件的地方,傳入數(shù)據(jù)。其實(shí)這種方法和中控制器之間傳遞數(shù)據(jù)的有點(diǎn)類似的。
作用域
在vue中,組件實(shí)例的作用域是孤立的,父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯。這意味著不能 (也不應(yīng)該) 在子組件的模板內(nèi)直接引用父組件的數(shù)據(jù)。下面幾種方法可以實(shí)現(xiàn)組件之間數(shù)據(jù)的傳遞。
通過prop傳遞數(shù)據(jù)
1)在子組件中,使用prop屬性,顯示的表明,它所需要的數(shù)據(jù)。
2)在父組件中,需要引用子組件的地方,傳入數(shù)據(jù)。
具體看下面的代碼:
Vue.component("my-item",{ template:"//傳入數(shù)據(jù),注意引號里面的為父組件的數(shù)據(jù), 這是組件,{{value}}", props:["value"],//聲明需要的數(shù)據(jù),HTML 特性是不區(qū)分大小寫的,所以此處如果為駝峰命名法,如:myMessage,則在模板中需要轉(zhuǎn)化為用斷線隔開的形式: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)給子組件,但是不會反過來。當(dāng)你想改變prop中數(shù)據(jù)時(shí),可采用如下方法:定義一個局部變量,并用 prop 的值初始化它,或者使用計(jì)算屬性。
通過自定義事件
自定義事件可以實(shí)現(xiàn)子組件向父組件傳遞數(shù)據(jù),具體方法如下:
1)在子組件中使用$emit(eventName,[...args])觸發(fā)事件,傳遞數(shù)據(jù)
2)在父組件中$on(eventName,callback)監(jiān)聽事件,接受數(shù)據(jù)作為回調(diào)函數(shù)的參數(shù),并執(zhí)行回調(diào)函數(shù)。
其實(shí)這種方法和angular中控制器之間傳遞數(shù)據(jù)的有點(diǎn)類似的。注意觸發(fā)和監(jiān)聽事件的事件類型必須要保持一致,才可接受導(dǎo)數(shù)據(jù)。具體看下面的例子:
{{number}}Vue.component("my-item",{ template:"", data:function(){ return { count : 0, } }, methods:{ add:function(){ this.count+=1; this.$emit("cli",this.count);//觸發(fā)當(dāng)前實(shí)例上的事件。多個參數(shù)可以數(shù)組的形式傳遞 } } }); //創(chuàng)建vue實(shí)例 const vm=new Vue({ el:"#app", data:{ number:"" }, methods:{ totlcli:function(num){//這個回調(diào)在父組件監(jiān)聽到事件時(shí),執(zhí)行的,其參數(shù)為觸發(fā)事件時(shí)傳遞的。 return this.number=num; }, }, });
這樣就可以把子組件中的數(shù)據(jù)通過自定義事件的方式傳到了父組件。
使用slot分發(fā)內(nèi)容
主要應(yīng)用場景是,混合父組件的內(nèi)容與子組件自己的模板時(shí)用到。具體使用步驟: 1)在子組件中,使用slot標(biāo)簽作為組件模板之中的內(nèi)容分發(fā)插槽。元素自身將被替換。 2)在父組件中,使用slot屬性,用于標(biāo)記往哪個slot中插入子組件內(nèi)容。 當(dāng)name相同時(shí),響應(yīng)的內(nèi)容就會被插入到子組件中去 具體看下面的例子:
Vue.component("my-item",{ template:"這是頭部
這是多余的內(nèi)容,
這是尾部
"+ ""+ " "+ ""+ " 備用插槽,當(dāng)沒有備用內(nèi)容會顯示出來 ", props:{ }, data:function(){ return { } } }); const vm=new Vue({ el:"#app", data:{ }, methods:{ }, });渲染結(jié)構(gòu)如下:
注意:匿名(沒用name屬性)的slot元素,作為找不到匹配的內(nèi)容片段的備用插槽,即在父組件中沒有使用slot屬性的內(nèi)容會在這個備用插槽顯示。如果沒有默認(rèn)的 slot,這些找不到匹配的內(nèi)容片段將被拋棄。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/84347.html
相關(guān)文章
vue中8種組件通信方式, 值得收藏!
摘要:一父組件通過的方式向子組件傳遞數(shù)據(jù),而通過子組件可以向父組件通信。而且只讀,不可被修改,所有修改都會失效并警告。 之前寫了一篇關(guān)于vue面試總結(jié)的文章, 有不少網(wǎng)友提出組件之間通信方式還有很多, 這篇文章便是專門總結(jié)組件之間通信的 vue是數(shù)據(jù)驅(qū)動視圖更新的框架, 所以對于vue來說組件間的數(shù)據(jù)通信非常重要,那么組件之間如何進(jìn)行數(shù)據(jù)通信的呢?首先我們需要知道在vue中組件之間存在什么樣...
Vue 單文件中的數(shù)據(jù)傳遞
摘要:兩個同級組件之間傳遞數(shù)據(jù),通過傳遞數(shù)據(jù)。準(zhǔn)備工作,我新建了個文件,分別是實(shí)例根組件,包含和組件的父組件,的同級組件父組件向子組件傳遞數(shù)據(jù),通過傳遞數(shù)據(jù)。 ??Vue 的單文件組件在使用 Vue 時(shí)非常常用,所以我們也會經(jīng)常遇到組件之間需要傳遞數(shù)據(jù)的時(shí)候,大致分為三種情況: 父組件向子組件傳遞數(shù)據(jù),通過 props 傳遞數(shù)據(jù)。 子組件向父組件傳遞數(shù)據(jù),通過 events 傳遞數(shù)據(jù)。 兩...
vue組件之間通信實(shí)錄
摘要:一般在的開發(fā)中都是模塊化開發(fā),所以當(dāng)涉及到兄弟組件之間的通信的時(shí)候,我們可以在入口文件中事先聲明一個全局的事件巴士即一個全局的供實(shí)例,然后通過他來傳導(dǎo)數(shù)據(jù)。 1、在vue中父組件是通過props傳遞數(shù)據(jù)給子組件 子組件只接受在子組件中定義過的props的值, Vue.component(child-component, { props: [prop1, prop2], // 定義...
vuejs組件通信精髓歸納
摘要:組件的通信和和內(nèi)置的通信手段一般有兩種給元素或組件注冊引用信息訪問父子實(shí)例。有時(shí)候兩個組件之間需要進(jìn)行通信,但是它們彼此不是父子組件的關(guān)系。詳情可參考參考組件之間種組件通信方式總結(jié)參考參考 組件的分類 常規(guī)頁面組件,由 vue-router 產(chǎn)生的每個頁面,它本質(zhì)上也是一個組件(.vue),主要承載當(dāng)前頁面的 HTML 結(jié)構(gòu),會包含數(shù)據(jù)獲取、數(shù)據(jù)整理、數(shù)據(jù)可視化等常規(guī)業(yè)務(wù)。 功能性抽...
vue學(xué)習(xí)筆記4
摘要:主要當(dāng)作屬性來使用方法表示一個具體的操作,主要書寫業(yè)務(wù)邏輯一個對象,鍵是需要觀察的表達(dá)式,值是對應(yīng)回調(diào)函數(shù)。父組件向子組件傳值 組件實(shí)例定義方式,注意:一定要使用props屬性來定義父組件傳遞過來的數(shù)據(jù) // 創(chuàng)建 Vue 實(shí)例,得到 ViewModel var vm = new Vue({ el: '#app', data: {...
發(fā)表評論
0條評論
閱讀 1653·2021-11-23 09:51
閱讀 2677·2021-11-22 09:34
閱讀 1316·2021-10-14 09:43
閱讀 3661·2021-09-08 09:36
閱讀 3206·2019-08-30 12:57
閱讀 2025·2019-08-30 12:44
閱讀 2516·2019-08-29 17:15
閱讀 3014·2019-08-29 16:08