vue元件間通訊的幾種方式

2021-09-28 16:40:35 字數 3700 閱讀 4677

方法一、props/$emit

1、父元件向子元件傳值

父元件中通過v-bind繫結需要給子元件傳遞的值,子元件中通過props拿到父元件傳遞的值

>

"username"

/>

//前者自定義名稱便於子元件呼叫,後者要傳遞資料名

<

/div>

<

/template>

import child from

"./components/child"

export

default},

components:

}

//child子元件

="hello"

>

}<

/span>

<

/div>

<

/template>

export

default}}

<

/script>

2、子元件向父元件傳值

子元件中通過$emit給父元件傳值,第乙個引數為繫結的方法,第二個引數為要傳遞的值;父元件通過v-on監聽子元件傳來的方法。

// 子元件

"pushdatatoparent"

>子元件向父元件傳值<

/button>

<

/div>

<

/template>

export

default},

methods:}}

<

/script>

// 父元件

>

"receivechilddata"

/>

//與子元件titlechanged自定義事件保持一致

// receivechilddata($event)接受傳遞過來的文字

}<

/h2>

<

/div>

<

/template>

import child from

"./components/child"

export

default},

methods:},

components:

}<

/script>

方法二、$emit / $on

這種方法通過乙個空的vue例項作為**事件匯流排(事件中心),用它來觸發事件和監聽事件,巧妙而輕量地實現了任何元件間的通訊,包括父子、兄弟、跨級。

具體實現方式:

var event=

newvue()

;event.

$emit

(事件名,資料)

;//需要傳值的元件使用該方法

event.

$on(事件名,data =>);

//接收資料的元件使用的方法

// 元件a

>

"emitdata"

>傳值<

/button>

<

/div>

<

/template>

export

default},

methods:}}

<

/script>

// 元件b

>

<

/div>

<

/template>

export

default},

mounted()

)}}<

/script>

方法三、provide/ inject

父元件向其所有子元件注入乙個依賴,不論元件層次有多深,並在起上下游關係成立的時間裡始終生效。換句話說:父元件中通過provide來提供變數,然後在子元件中通過inject來注入變數。

provide / inject 解決了跨層級元件間的通訊問題,不過它的使用場景,主要是子元件獲取上級元件的狀態。

// a元件

export

default

}

// b元件

export

default

}

需要注意的是:provide 和 inject 繫結並不是可響應的。這是刻意為之的。然而,如果你傳入了乙個可監聽的物件,那麼其物件的屬性還是可響應的----vue官方文件

所以,上面 a.元件 的 data如果改變了,b元件的 data是不會改變的,仍然是原來傳過來的值。

那麼,provide和inject如何才能實現資料響應式

答案是使用vue2.6版本最新api vue.observable 優化響應式 provide

provide()

);return;}

, methods:

}

}<

/div>

<

/template>

export

default)}

}};<

/script>

方法四、$attrs

繼承所有的父元件屬性(除了prop傳遞的屬性、class 和 style ),通常和inheritattrs一起使用,inheritattrs預設值true,繼承所有的父元件屬性(除props的特定繫結),如果你不希望元件的根元素繼承特性,設定inheritattrs: false,但是class屬性會繼承

//父元件

="hello"

>

最外層元件<

/span>

"'張三'"

:age=

"28"

:***=

"'男'"

/>

<

/div>

<

/template>

import first from

"./first"

;export

default

,data()

;}};

<

/script>

="hello"

>

第一層元件<

/span>

"$attrs"

/>

<

/div>

<

/template>

import second from

"./second"

;export

default

, props:

,created()

}};<

/script>

="hello"

>

第二層子元件元件<

/span>

<

/div>

<

/template>

export

default;}

, props:

,created()

}};<

/script>

方法五、vuex

此處省略一萬字。。。啊哈哈哈哈

vue元件間的幾種通訊方式

1.父 往 子元件上傳遞 props 父元件上寫 子元件上使用 props接收 在vue例項中加上 1.props 2.props parent 2.子 往父親上傳遞 emit 父元件 1.2.在 methods 子元件 1.觸發父元件上的那個child事件 可以在created鉤子函式中定義 th...

vue元件間通訊方式

一 props emit 將要傳遞的引數繫結到元件上,子元件通過props接受引數 props 子元件通過事件傳遞給父元件 this emit functionname 值 只適用於父子 二 on emit 無差別轟炸,想隔幾層隔幾層傳 第一步新建js import vue from vue 使用 ...

Vue元件間通訊方式都有哪些

開始之前,我們把元件間通訊這個詞進行拆分 都知道元件是vue最強大的功能之一,vue中每乙個.vue我們都可以視之為乙個元件 通訊指的是傳送者通過某種 以某種格式來傳遞資訊到收信者以達到某個目的。廣義上,任何資訊的交通都是通訊 元件間通訊即指元件 vue 通過某種方式來傳遞資訊以達到某個目的 舉個栗...