vue中父子組件傳值落剪,子父之間傳值睁本,組件之間傳值方法總結(jié)

可能由于vue用的還是比較少,之前都是用vuex來進(jìn)行變量共享的忠怖,老是忘記呢堰,這里做個(gè)總結(jié),方便后期查詢凡泣。

父子組件傳值

方法:

通過props來進(jìn)行父子組件之間的通信

  1. 父組件中通過v-bind傳參數(shù)
  2. 子組件通過props接受參數(shù)
  3. 依賴注入(另外一種非響應(yīng)式但是可以遞歸傳值的方法請(qǐng)看這篇文章)

例子

<!-- 父組件 -->
<template>
    <div>
        this is parent
        <child :name = "name" v-bind = "options" :arr = "testArr" @test="test"></child>
    </div>
</template>
<script>
    import child from './child'
    export default {
        name: 'parent',
        components: {
            child
        },
        data() {
            return {
                name: 'wcx',
                options: {
                    age: 12,
                    sex: 'man'
                },
                testArr: [1,23,4]
            }
        },
        methods: {
            test(msg) {
                this.name = msg;
            }
        }

    }
</script>
<style lang="less">

</style>
<!-- 子組件 -->
<template>
    <div>
        {{name}}
        {{age}}
        {{sex}}
        {{arr[1]}}
        <button @click = "showmsg">傳值給父組件</button>
    </div>
</template>
<script>
export default {
    props:{
        name: {
            type: String,
            default: function() {
                return 'hello'
            }
        }, 
        age: Number, 
        sex: String,
        arr: Array
    },
    data() {
        return {

        }
    },
    methods: {
        showmsg() {
            this.$emit('test', 'child')
        }
    }
}
</script>
<style lang="less">
    
</style>

就像上面代碼寫的那樣枉疼,只要v-bind在父組件中的子組件中傳入?yún)?shù)皮假,子組件通過props捕獲即可且不需要在子組件的data中聲明。

子父組件傳值

方法:

通過自定義事件來進(jìn)行父子組件之間的通信

  1. 在父組件中寫一個(gè)事件以及觸發(fā)后的回調(diào)函數(shù)骂维,并寫好形參惹资。
  2. 在子組件中用原生事件觸發(fā)一個(gè)回調(diào)函數(shù),里面寫成如下形式:$vm.emit('父組件中定義的xx事件', '要傳的參數(shù)')

例子

同父子組件之間的例子

組件間的傳參

方法:

通過vuex來管理

  1. 安裝vuex
  2. Vue.use(vuex)
  3. 對(duì) vuex中store進(jìn)行實(shí)例化
  4. 在vue的實(shí)例中傳入store
  5. 通過vm.store.commit('store中定義好的方法', '需要傳的參數(shù) ')改變參數(shù)
  6. 在需要傳參的組件中通過computed和watch進(jìn)行監(jiān)聽捕獲需要的參數(shù)

例子

<!-- 需要傳參的組件 -->
<template>
    <div>
        this is parent
        {{param1}}
        <button @click = "test">parentbtn</button>
        <child></child>
    </div>
</template>
<script>
    import child from './child';
    export default {
        name: 'parent',
        components: {
            child
        },
        data() {
            return {
                param1: this.$store.state.param1
            }
        },
        methods: {
            test() {
                this.$store.commit('f1', 1)
            }
        },
        //利用computed監(jiān)聽vuex值的變化
        computed: {
            listenStore() {
                return this.$store.state.param1;
            }
        },
        //利用watch監(jiān)聽computed中l(wèi)istenStore函數(shù)的變化并將新值賦給本組件中定義的變量
        watch: {
            listenStore: {
                handler(newValue, oldValue) {
                    this.param1 = this.$store.state.param1;                
                },
                deep: true
            }
        }

    }
</script>
<style lang="less">

</style>
//main.js 入口js
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import Vuex from 'vuex'

Vue.config.productionTip = false;

Vue.use(Vuex);//放在最前面
const store = new Vuex.Store({//創(chuàng)建store實(shí)例
  state: {
    param1: 0
  },
  mutations: {
    f1(state, param) {
      state.param1 = param;
    }
  }
})

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,//傳入vue實(shí)例的內(nèi)部
  components: { App },
  template: '<App/>'
})
``
# 【完】
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末航闺,一起剝皮案震驚了整個(gè)濱河市褪测,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌潦刃,老刑警劉巖侮措,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乖杠,居然都是意外死亡分扎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門胧洒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畏吓,“玉大人,你說我怎么就攤上這事略荡♀钟叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵汛兜,是天一觀的道長巴粪。 經(jīng)常有香客問我,道長粥谬,這世上最難降的妖魔是什么肛根? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮漏策,結(jié)果婚禮上派哲,老公的妹妹穿的比我還像新娘。我一直安慰自己掺喻,他們只是感情好芭届,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著感耙,像睡著了一般褂乍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上即硼,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天逃片,我揣著相機(jī)與錄音,去河邊找鬼只酥。 笑死褥实,一個(gè)胖子當(dāng)著我的面吹牛呀狼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播损离,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼哥艇,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了僻澎?” 一聲冷哼從身側(cè)響起她奥,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怎棱,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绷跑,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拳恋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砸捏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谬运。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垦藏,靈堂內(nèi)的尸體忽然破棺而出梆暖,到底是詐尸還是另有隱情,我是刑警寧澤掂骏,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布轰驳,位于F島的核電站,受9級(jí)特大地震影響弟灼,放射性物質(zhì)發(fā)生泄漏级解。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一田绑、第九天 我趴在偏房一處隱蔽的房頂上張望勤哗。 院中可真熱鬧,春花似錦掩驱、人聲如沸芒划。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽民逼。三九已至,卻和暖如春苔可,著一層夾襖步出監(jiān)牢的瞬間缴挖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國打工焚辅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留映屋,地道東北人苟鸯。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像棚点,于是被迫代替她去往敵國和親早处。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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