美文网首页Vue.js前端Vue专辑
vue学习笔记-组件间通信

vue学习笔记-组件间通信

作者: 前端_自嘲君 | 来源:发表于2020-04-01 16:06 被阅读0次

    组件的优势:便于维护,提高开发效率,可复用,便于协同开发,便于调试。
    组件间的通信

    1. 父子间通信
    • 子传父
      //子组件(HelloWorld)派发
    this.$emit('msg','你好,中国')
    
    <!--父组件监听-->
    <hello-world @msg="msgEvent">
    
    //父组件
    methods:{
      msgEvent(val){
        console.log(val) //你好,中国
      }
    }
    
    • 父传子
    <!--父组件中-->
    <hello-world msg="你好,中国">
    
    //子组件中
    export default{
      //props:['msg'],
      props:{
        msg:{
          type:string,
          require:true 
        }
      },
      mounted(){
        console.log(this.msg)//你好,中国
      }
    }
    

    2.兄弟间传递

    • $parent
    • $root
      两者都是实现访问父组件的属性和方法,两者的区别在于,如果存在多级子组件,通过parent访问得到的是最近以及的父组件,通过root 访问得到的是根父组件
    //组件helloWorld
    this.$parent.$emit('foo','this is from brother')
    //this.$root.$emit('foo','this is from brother')
    
    //组件helloWorld2
    this.$parent.$on('foo',msg=>{
      console.log(msg)//this is from brother
    })
    //this.$root.$on('foo',msg=>{
    //  console.log(msg)//this is from brother
    //})
    
    1. $children 查找当前组件的直接子组件,可以遍历全部子组件, 需要注意 并不保证顺序,也不是响应式的
    this.$children[0].xxx = '000'
    
    1. provide inject跨组件传值
     provide(){
       return {
         msg:'123'
       }
     }
    //descendant
    inject:['msg']
    
    1. $attrs:继承所有的父组件属性,在子组件展开父元素中,未被props的属性(出class,style)
    <!--父组件-->
    <hello-world placeholder="你好,中国" />
    <!--子组件-->
    <input v-on="$attrs" >
    

    6.$listener事件:当前组件监听的事件,通俗的讲也就是在使用组件的时候在标签中定义的事件,如@click,以及一些自定义事件@demo等

    //父组件
    <hello @click="clickMe">
    methods:{
      clickMe:function(){
        console.log('你好')
      }
    }
    //子组件
    <button v-on="$listener">点击</button>
    //你好
    
    1. refs 获取子节点引用
    <!--父组件-->
    <hello />
    <hello ref="hello01">
    
    mounted(){
      this.$refs.hello01.xx = '000'
    }
    

    相关文章

      网友评论

        本文标题:vue学习笔记-组件间通信

        本文链接:https://www.haomeiwen.com/subject/jhqauhtx.html