vue父子组件交互

重点:

父组件主动获取子组件的数据和方法:
                alert(this.$refs.header.msg);

                this.$refs.header.run();
子组件主动获取父组件的数据和方法:  
                this.$parent.数据

                this.$parent.方法

parent组件Home.vue

<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="home">
    
        <v-header ref="header"></v-header>

        <hr>
         首页组件   

         <button @click="getChildData()">获取子组件的数据和方法</button>

    </div>

</template>


<script>


/*
父组件给子组件传值

    1.父组件调用子组件的时候 绑定动态属性
        <v-header :title="title"></v-header>

    2、在子组件里面通过 props接收父组件传过来的数据
        props:['title']



        props:{

            'title':String      
        }

    3.直接在子组件里面使用



父组件主动获取子组件的数据和方法:

    1.调用子组件的时候定义一个ref

        <v-header ref="header"></v-header>

    2.在父组件里面通过

        this.$refs.header.属性

        this.$refs.header.方法





子组件主动获取父组件的数据和方法:  


        this.$parent.数据

        this.$parent.方法



*/

    import Header from './Header.vue';

    export default{
        data(){
            return {               
               msg:'我是一个home组件',
               title:'首页111'
            }
        },
        components:{

            'v-header':Header
        },
        methods:{

            run(){

                alert('我是Home组件的run方法');
            },
            getChildData(){

                //父组件主动获取子组件的数据和方法:
                // alert(this.$refs.header.msg);

                this.$refs.header.run();
            }
        }


    }

</script>

<style lang="scss" scoped>

    /*css  局部作用域  scoped*/

    h2{

        color:red
    }

    
</style>

子组件:Header.vue

<template>


    <div>
    
        <h2>我是头部组件</h2>

      
          <button @click="getParentData()">获取子组件的数据和方法</button>

       
    </div>
</template>




<script>
    
export default{


    data(){

        return{
            msg:'子组件的msg'
        }
    },
    methods:{
       
            run(){

                alert('我是子组件的run方法')
            },
            getParentData(){


                /*
                子组件主动获取父组件的数据和方法:  


                this.$parent.数据

                this.$parent.方法

                
                */
                // alert(this.$parent.msg);

                //this.$parent.run();
            }
    }
    
}

</script>

非父子组件传值

1、新建一个VueEvent.js文件   然后引入vue  实例化vue  最后暴露这个实例
 

import Vue from 'vue';
var VueEvent = new Vue()

export default VueEvent;

  2、在要广播的地方引入刚才定义的实例

//引入 vue实例


    import VueEvent from '../model/VueEvent.js';


  3、通过 VueEmit.$emit('名称','数据')

VueEvent.$emit('to-news',this.msg)


  4、在接收收数据的地方通过 $om接收广播的数据
    VueEmit.$on('名称',function(){


    })

 VueEvent.$on('to-news',function(data){
                console.log(data);
            })

 。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值