vue組件通信

父組件=>子組件

props

//child

props: ["message"],

//parent

<HelloWorld message="hello world"></HelloWorld>

特性$attrs

//child里沒有在props里聲明foo,可以用如下方式取

this.$attrs.foo

//parent

<HelloWorld foo="foo"></HelloWorld>

問題1:props和$attrs的區(qū)別

props需要聲明才能取到值,子類需要主動接收屬性

$attrs不需要聲明可以取到值,子類不用主動接收屬性,會直接放在子類根元素上。在props里聲明的屬性不會在$attrs里取到

引用refs

//parent 想修改子組件里的xx值

<HelloWorld foo="foo" ref='fx'></HelloWorld>

this.$refs.fx.xx='xxxx'

子元素$children

// parent

this.$children[0].xx = 'xxx'

問題2:$refs和$children 的區(qū)別

$refs元素或者組件標(biāo)簽上添加ref屬性指定一個引用信息,引用信息將注冊在父組件的$refs對象上,使用$ref來指向dom元素或者組件實例,

需要注意:

$refs不能在created生命周期中使用?因為在組件創(chuàng)建時候?該ref還沒有綁定元素?

如果想在method中使用,使用 this.$nextTick(() => {}) 等頁面渲染好再調(diào)用,這樣就可以了

$children 訪問子組件實例,返回的是一個子組件數(shù)組 因為是異步,所以不保證順序的,

子組件=>父組件

//child

this.$emit('addTest',message)

//parent

<Cart v-on:addTest="cartAdd"></Cart>

兄弟組件:通過共同父輩組件

通過共同的祖輩組件搭橋,$parent或$root。

// brother1

this.$parent.$on('foo', handle)

// brother2this.$parent.$emit('foo')


祖先和后代之間

由于嵌套層數(shù)過多,傳遞props不切實際,vue提供了 provide/inject API完成該任務(wù)

provide/inject:能夠?qū)崿F(xiàn)祖先給后代傳值

// ancestor

provide() {? ? return {foo: 'foo'}

}

// descendant

inject: ['foo']

任意兩個組件之間:

事件總線 或 vuex事件總線:創(chuàng)建一個Bus類負責(zé)事件派發(fā)、監(jiān)聽和回調(diào)管理

// Bus:事件派發(fā)、監(jiān)聽和回調(diào)管理

class Bus{

constructor(){

this.callbacks = {}}

$on(name, fn){

this.callbacks[name] = this.callbacks[name] || []

this.callbacks[name].push(fn) }

$emit(name, args){

if(this.callbacks[name]){ this.callbacks[name].forEach(cb => cb(args)) } }

} // main.js Vue.prototype.$bus = new Bus() // child1 this.$bus.$on('foo', handle) // child2 this.$bus.$emit('foo')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 能工摹形,巧匠竊意。必三省吾身,萬不可怠惰因循。 foreword 這篇容納了我個人所知道的一些Vue 2.x組件...
    aichisuan閱讀 419評論 0 1
  • 1、props / $emit (這是最常用的一種父子組件之間傳遞數(shù)據(jù)的方式) 父組件通過綁定屬性來向子組件傳遞數(shù)...
    keke柯柯柯閱讀 989評論 0 0
  • 對于vue來說,組件之間的消息傳遞是非常重要的,下面是我對組件之間消息傳遞的各種方式的總結(jié),總共有8種方式。 1....
    edc余悸閱讀 425評論 0 3
  • 組件是 vue.js最強大的功能之一,而組件實例的作用域是相互獨立的,這就意味著不同組件之間的數(shù)據(jù)無法相互引用。一...
    虛竹_d36e閱讀 303評論 0 0
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開了第一次的黨會,身份的轉(zhuǎn)變要...
    余生動聽閱讀 10,877評論 0 11

友情鏈接更多精彩內(nèi)容