vue組件之間的通信:props方式、emit方式、ref方式

在Vue中組件實(shí)例之間的作用域是孤立的,以為不能直接在子組件上引用父組件的數(shù)據(jù),同時(shí)父組件也不能直接使用子組件的數(shù)據(jù)

情景1,父組件中調(diào)用子組件的方法并向子組件傳參——ref

聲明下面說的是vue 2.0的

1、當(dāng)ref直接定義在dom元素上時(shí),則通過this.$refs.name可以獲取到dom對(duì)dom進(jìn)行原生的操作

//父組件

<component-son ref="firstson"></component-son>


//子組件component-son內(nèi)定義一個(gè)方法供父組件調(diào)用,例如 init

init: function(value) {

//在這里獲取到父組件傳過來的參數(shù)

},

通過this.$refs獲取到dom進(jìn)行操作(注意ref屬性的命名不能用駝峰,同時(shí)獲取的時(shí)候也是)

父組件中調(diào)用子組件的方法并向子組件傳參

this.$refs.firstson.init(a);

//子組件的init方法會(huì)調(diào)用一次并傳遞參數(shù)a


情景2,子組件觸發(fā)父組件的方法并傳遞參數(shù)——emit

子組件通過this.$emit()派發(fā)事件,父組件利用v-on對(duì)事件進(jìn)行監(jiān)聽,實(shí)現(xiàn)參數(shù)的傳遞

//父組件 ? 自定義事件 hello

<component-son @hello="fatherevent"></component-son>

//子組件

this.$emit('hello',{});

//向父組件派發(fā)事件,同時(shí)傳遞參數(shù){},后面的參數(shù)的個(gè)數(shù)不限

//父組件的fatherevent方法將會(huì)執(zhí)行


情景3,父組件向子組件動(dòng)態(tài)傳值——props

//父組件

<component-son ??:messageProp="sendProp"></component-son>

data{

sendProp:'',

}

//子組件

props: {

messageProp: String,

},

父組件的參數(shù)sendProp改變,子組件的參數(shù)? this.messageProp同時(shí)改變

注意:

1、傳遞參數(shù)時(shí)要用—代替駝峰命名,HTML不區(qū)分大小寫

2、sendProp要在父組件的data中定義,例如 sendProp:''

3、messageProp在子組件的props中聲明類型,例如 messageProp: String

4、在利用props實(shí)現(xiàn)傳值的過程中理論上是要實(shí)現(xiàn)單向傳遞,即父組件改變相關(guān)參數(shù)的值,子組件也相應(yīng)變化,但是子組件對(duì)參數(shù)的改變不應(yīng)該影響父組件。但是當(dāng)props中接收的是父組件傳遞的引用類型(對(duì)象或者是數(shù)組)時(shí),在子組件中對(duì)數(shù)據(jù)改變時(shí),父組件中的數(shù)據(jù)也會(huì)相應(yīng)的改變,因?yàn)閮烧呤侵赶虻耐坏刂穬?nèi)存。如果不想子組件的改變影響父組件可以利用深拷貝,將接受的數(shù)據(jù)進(jìn)行深拷貝后在子組件中使用,而不直接操作接受的數(shù)據(jù)。


如果幫到了你,請(qǐng)點(diǎn)贊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容。關(guān)于...
    云之外閱讀 5,074評(píng)論 0 29
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:var data = { a:...
    云之外閱讀 2,241評(píng)論 0 6
  • 深入JSX date:20170412筆記原文其實(shí)JSX是React.createElement(componen...
    gaoer1938閱讀 8,104評(píng)論 2 35
  • 9.1 什么是組件? 組件(Component)是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,...
    白水螺絲閱讀 816評(píng)論 0 2
  • 在vue組件通信中其中最常見通信方式就是父子組件之中的通性,而父子組件的設(shè)定方式在不同情況下又各有不同。最常見的就...
    歲月如同馬匹閱讀 31,589評(píng)論 5 40