組件通信

vue傳值可分為父子之間傳值、兄弟組件之間傳值、跨代組件之間傳值

1.父子之間傳值:可以使用$emit/props

偽代碼如下

    <!-- 父組件 -->
    <child :value="value" @changeValue='changeValue'></child>
    data() {
        return {
            value:'parent',
        }
    },
    methods: {
        changeValue(val) {
            console.log(val)
        }
    }
    <!-- 子組件 -->
    <div>
        子組件 {{value}}
        <button @click="emitValue">傳值</button>
    </div>
    props: ['value'],
    methods: {
        emitValue() {
            this.$emit('changeValue', this.value+'+child')
        }
    }

2. 兄弟組件之間傳值

2.1. 可采用$emit/props ,子1傳父,父?jìng)髯?, 與父子之間傳值相似
2.2. 采用vuex存儲(chǔ)狀態(tài)

2.3. eventBus時(shí)間車

  • eventsBus.$emit 發(fā)送數(shù)據(jù)
  • eventBus.$on 監(jiān)聽數(shù)據(jù)
  • eventBus.$off('msg') 取消監(jiān)聽指定事件
  • eventBus.$off() 取消監(jiān)聽所有事件
    偽代碼
// eventBus.js
import Vue from 'vue'
export const eventBus = new Vue()

<template>
<!-- 子1 -->
    <div>
        child01     {{msg}}
    </div>
</template>
<script>
import {eventBus} from '../js/eventBus'
export default {
    data() {
        return {
            msg: ''
        }
    },
    mounted() {
            // 先釋放監(jiān)聽,避免重復(fù)監(jiān)聽
            eventBus.$off('child02').$on('child02', val => {
                this.msg = val;
            })
        }
}
</script>



<template>
<!-- 子2 -->
    <div>
        <button @click="emitBorther">child02</button>
    </div>
</template>
<script>
import {eventBus} from '../js/eventBus'
export default {
    methods: {
        emitBorther() {
            eventBus.$emit('child02','我是child02')
        }
    }
}
</script>

注意
頁(yè)面銷毀時(shí)一定要釋放監(jiān)聽
監(jiān)聽事件時(shí),需要先釋放監(jiān)聽,避免重復(fù)監(jiān)聽

3. 跨代組件傳值

3.1.采用vuex存儲(chǔ)狀態(tài)
3.2. provide/inject : 一個(gè)祖先組件向其所有子孫后代注入一個(gè)依賴,不論組件層次有多深,并在其上下游關(guān)系成立的時(shí)間里始終生效。
偽代碼如下

// 父級(jí)組件提供 'foo'
var Provider = {
  provide: {
    foo: 'bar'
  },
  // ...
}

// 子組件注入 'foo'
var Child = {
  inject: ['foo'],
  created () {
    console.log(this.foo) // => "bar"
  }
  // ...
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 學(xué)習(xí) 2019-6-19 vue是數(shù)據(jù)驅(qū)動(dòng)視圖更新的框架, 所以對(duì)于vue來(lái)說(shuō)組件間的數(shù)據(jù)通信非常重要,那么組件之...
    回憶不死我們不散閱讀 524評(píng)論 0 0
  • 組件系統(tǒng) 組件通訊是vue.js的核心之一,不管是在項(xiàng)目中,還是面試中,都是必考的知識(shí)點(diǎn)之一。組件通訊通常涉及到父...
    大臉貓的前端之路閱讀 913評(píng)論 0 3
  • 本篇文章帶大家詳細(xì)了解一下vue中8種組件通信方式。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)大家有所幫助...
    淺淺而談閱讀 2,253評(píng)論 2 50
  • 原文地址 vue是數(shù)據(jù)驅(qū)動(dòng)視圖更新的框架, 所以對(duì)于vue來(lái)說(shuō)組件間的數(shù)據(jù)通信非常重要,那么組件之間如何進(jìn)行數(shù)據(jù)通...
    dxxwdong閱讀 434評(píng)論 0 0
  • 在現(xiàn)代的三大框架中,其中兩個(gè)Vue和React框架,組件間傳值方式有哪些? 組件間的傳值方式 組件的傳值場(chǎng)景無(wú)外乎...
    mdiep閱讀 1,340評(píng)論 0 0

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