vue中父子组件传值,子父之间传值,组件之间传值方法总结

可能由于vue用的还是比较少,之前都是用vuex来进行变量共享的,老是忘记,这里做个总结,方便后期查询。

父子组件传值

方法:

通过props来进行父子组件之间的通信

  1. 父组件中通过v-bind传参数
  2. 子组件通过props接受参数
  3. 依赖注入(另外一种非响应式但是可以递归传值的方法请看这篇文章)

例子

<!-- 父组件 -->
<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在父组件中的子组件中传入参数,子组件通过props捕获即可且不需要在子组件的data中声明。

子父组件传值

方法:

通过自定义事件来进行父子组件之间的通信

  1. 在父组件中写一个事件以及触发后的回调函数,并写好形参。
  2. 在子组件中用原生事件触发一个回调函数,里面写成如下形式:$vm.emit('父组件中定义的xx事件', '要传的参数')

例子

同父子组件之间的例子

组件间的传参

方法:

通过vuex来管理

  1. 安装vuex
  2. Vue.use(vuex)
  3. 对 vuex中store进行实例化
  4. 在vue的实例中传入store
  5. 通过vm.store.commit('store中定义好的方法', '需要传的参数 ')改变参数
  6. 在需要传参的组件中通过computed和watch进行监听捕获需要的参数

例子

<!-- 需要传参的组件 -->
<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监听vuex值的变化
        computed: {
            listenStore() {
                return this.$store.state.param1;
            }
        },
        //利用watch监听computed中listenStore函数的变化并将新值赋给本组件中定义的变量
        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({//创建store实例
  state: {
    param1: 0
  },
  mutations: {
    f1(state, param) {
      state.param1 = param;
    }
  }
})

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,//传入vue实例的内部
  components: { App },
  template: '<App/>'
})
``
# 【完】
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容