關於vue元件相互通訊的幾種方式如下
父元件通過props向下傳遞資料給子元件,子元件通過event給父元件傳送訊息,實際上就是子元件把自己的資料傳送給父元件。
第一種方式處理父子元件之間的資料傳輸有乙個問題:如果父元件a下面有子元件b,元件b下面有元件c,這時如果元件a想傳遞資料給元件c怎麼辦呢? 如果採用第一種方法,我們必須讓元件a通過prop傳遞訊息給元件b,元件b在通過prop傳遞訊息給元件c;要是元件a和元件c之間有更多的元件,那採用這種方式就很複雜了。vue 2.4開始提供了att
rs
和attrs和
attrs和
listeners來解決這個問題,能夠讓元件a之間傳遞訊息給元件c。
>
>
type
="text"
v-model
="$attrs.messagec"
@input
="passcdata($attrs.messagec)"
>
div>
template
>
export
default},
methods:}}
<
/script>
>
>
type
="text"
v-model
="mymessage"
@input
="passdata(mymessage)"
>
v-bind
="$attrs"
v-on
="$listeners"
>
c>
div>
template
>
export
default],
//得到父元件a傳遞過來的資料,hello b
methods:}}
<
/script>
>
>
>
this is parent compoent!p
>
:messagec
="messagec"
:message
="message"
:getcdata
="getcdata"
:getchilddata
="getchilddata"
>
b>
div>
template
>
export
default},
methods:
,//執行c子元件觸發的事件
getcdata
(val)}}
<
/script>
在 vue.js 的2.2.0+
版本中新增加了 provide 和 inject 選項。他們成對出現,用於父級元件向下傳遞資料。
父元件中通過provide來提供變數,然後在子元件中通過inject來注入變數。不論子元件有多深,只要呼叫了inject那麼就可以注入provide中的資料。而不是侷限於只能從當前父元件的prop屬性來獲取資料,只要在父元件的生命週期內,子元件都可以呼叫。
>
>
>
this is parent compoent!p
>
>
child
>
div>
template
>
export
default
,data()
}}<
/script>
>
>
type
="text"
v-model
="mymessage"
>
div>
template
>
export
default
,data()
}}<
/script>
如果業務邏輯複雜,很多元件之間需要同時處理一些公共的資料,這個時候才有上面這一些方法可能不利於專案的維護,vuex的做法就是將這一些公共的資料抽離出來,然後其他元件就可以對這個公共資料進行讀寫操作,這樣達到了解耦的目的。
如果兩個元件不是父子關係呢?這種情況下可以使用**事件匯流排的方式。新建乙個vue事件bus物件,然後通過bus.emi
t觸發事
件,bu
s.
emit觸發事件,bus.
emit觸發
事件,b
us.on監聽觸發的事件。
公共事件匯流排eventbus的實質就是建立乙個vue例項,通過乙個空的vue例項作為橋梁實現vue元件間的通訊。它是實現非父子元件通訊的一種解決方案。
>
>
>
this is brother1 compoent!p
>
type
="text"
v-model
="mymessage"
@input
="passdata(mymessage)"
>
div>
template
>
>
export
default},
methods:}}
script
>
>
>
>
this is brother2 compoent!p
>
>
brother1傳遞過來的資料:}p
>
div>
template
>
>
export
default},
mounted()
)}}script
>
//**事件匯流排
var bus=
newvue()
;new
vue(
})
vue.
component
('child',,
data()
},methods:},
template:
` `}
) vue.
component
('parent',}
,data()
}})new
vue(
)
父beforecreate-
>父created-
>父beforemount-
>子beforecreate-
>子created-
>子beforemount-
>子mounted-
>父mounted
父beforeupdate-
>子beforeupdate-
>子updated-
>父updated
父beforeupdate-
>父updated
父beforedestroy-
>子beforedestroy-
>子destroyed-
>父destroyed
vue元件間通訊方式
一 props emit 將要傳遞的引數繫結到元件上,子元件通過props接受引數 props 子元件通過事件傳遞給父元件 this emit functionname 值 只適用於父子 二 on emit 無差別轟炸,想隔幾層隔幾層傳 第一步新建js import vue from vue 使用 ...
vue元件間通訊的幾種方式
方法一 props emit 1 父元件向子元件傳值 父元件中通過v bind繫結需要給子元件傳遞的值,子元件中通過props拿到父元件傳遞的值 username 前者自定義名稱便於子元件呼叫,後者要傳遞資料名 div template import child from components ch...
vue元件間的幾種通訊方式
1.父 往 子元件上傳遞 props 父元件上寫 子元件上使用 props接收 在vue例項中加上 1.props 2.props parent 2.子 往父親上傳遞 emit 父元件 1.2.在 methods 子元件 1.觸發父元件上的那個child事件 可以在created鉤子函式中定義 th...