1.Vue父子组件之间通信(数据传递)问题

1、父组件传值给子组件------->子组件使用 props 属性接收

2、子组件传值给父组件-------->子组件通过$emit 传递(自定义事件传递),父组件通过@属性名称接收

3、父组件,子组件,兄弟组件相互传值------>需要 bus 中央总线,相当于一个中介

1、父组件传值给子组件------->使用props属性接收

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        //1.此处通过v-bind(简写为冒号:)来绑定
        <my-component :message="message"></my-component><br>
    </div>
    <script src="vue.min.js"></script>
    <script>

        Vue.component('my-component',{
            //2.通过props接受父组件传给子组件的值
            props:['message'],
            template:'<span>|||我接收的值是|||:{{message}}</span>',
        })
        var app = new Vue({
            el:'#app',
            data:{
                message:'我是父组件要传给子组件的值'
            }
        })
    </script>
</body>
</html>

2、子组件传值给父组件-------->子组件通过$emit传递,父组件通过@属性名称接收

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        //2.父组件通过@来接受,然后通过getMsg方法来处理数据
        <my-component @message="getMsg"></my-component><br>
        <span>{{message}}</span>
    </div>
    <script src="vue.min.js"></script>
    <script>
        Vue.component('my-component',{
            template:'<button @click="sendData">向父组件传值</button>',
            methods:{
                sendData:function (e) {
                    //1.子组件通过this.$emit(key,value)传递值给父组件
                    this.$emit('message','我是子组件要传递给父组件的值');
                }
            }
        })
        var app = new Vue({
            el:'#app',
            data:{
                message:'1',
            },
            methods: {//4、此处必须是methods,不能是计算属性,mounted等
                //3.处理数据
                getMsg:function (msg) {
                    this.message = msg;
                }
            }
        })
    </script>
</body>
</html>

3、父组件,子组件,兄弟组件相互传值------>需要bus中央总线,相当于一个中介

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        {{message}}
        <my-component></my-component>
        <my-component1></my-component1>
    </div>
    <script src="vue.min.js"></script>
    <script>
        //定义中央总线bus
        var bus = new Vue();

        //组件1
        Vue.component('my-component',{
            template:'<button @click="btnClick">click</button>',
            methods:{
                btnClick:function () {
                    //通过bus中央总线传值,使用bus.$emit(key,value);
                    bus.$emit('data',111111)
                }
            }
        })
        //组件2
        Vue.component('my-component1',{
            data:function(){
                return {
                    msg:'第二个组件'
                }
            },
            template:'<span>{{msg}}</span>',

            //兄弟组件:通过bus中央总线接收值,使用bus.$on(key,function(){...});
            //此处需要使用钩子函数:mounted
            mounted:function () {
                var _this = this; //此处注意this指向
                bus.$on('data',function (msg1) {
                    alert(msg1)
                    _this.msg = msg1;
                })
            }
        })

        var app = new Vue({
            el: '#app',
            data:{
                message:'this is message'
            },
            //父组件:通过bus中央总线接收值,使用bus.$on(key,function(){...});
            //此处需要使用钩子函数:mounted
            mounted: function () {
                var _this = this;
                bus.$on('data',function (msg) {
                    _this.message = msg
                })

            }
        })
    </script>
</body>
</html>

附:Vue篇目录:

    1.Vue组件之间传值问题                              2.v-model 用在组件中

    3.Vue.js 实战 调查问卷WebApp项目          4.vue-cli + webpack搭建Vue开发环境

    5. Vue简单问题汇总(持续更新...)                 6.Vue组件之间数据通信之Bus总线

    7.Vue-Router导航钩子(附Demo实例)         8.ES6箭头函数与普通函数的区别  

    9.Vuex的使用                                             10.Vuex组件中的mapState、mapGetters、mapMutations、mapActions等辅助函数

   11.组件中调用Vuex的state,getters,mutations,actions,modules的数据传递、传参问题

   12.Vuex命名空间namespaced                   13.Vue axios的使用      


---->如有疑问,请发表评论,或者联系博主:lzb348110175@163.com,欢迎哦^_^
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值