• vue组件通信


    在实习过程中,有许多地方需要用到组件通信,尝试过几种方法,现来总结一下
    说明:Father.vue 是父组件 ,Brother.vue和Brather.vue是子组件

    父子通信

    父传子

    1. props:
      父组件:
      通过v-bind绑定一个变量,childBrather则是子组件要引用的名称。
       <div>
         我是父组件
         <Brather v-bind:childBrather="content"></Brather>
       </div>
    
    import Brather from './brother/Brather'
    export default {
      data () {
        return {
          content: '我是父'
        }
      },
      components: { Brather }
    }
    

    子组件:

    export default {
      props: ['childBrather'],  //父组件传过来的值
      data () {
      },
      created () {
        console.log(this.childBrather)  //像正常data变量一样使用即可
      }
    }
    

    props格式:

    //格式一
    props: {
        childBrather: String // 这里指定了字符串类型,如果类型不一致会警告哦
    }
    
    //格式二:
    props: {
        childBrather: {
            type: String,
            default: 'sichaoyun' 
        }
    }
    
    props: ['childBrather']
    
    //格式三
    
    

    子传父:

    1. this.$emit绑定一个事件
      子组件
    <div>
        我是brather组件
        <button @click="toFather">点我触发</button> //绑定一个事件 在此中向父组件传值
    </div>
    
      data () {
        return {
          form: {
            name: 'Joanne',
            age: 22
          }
        }
      },
      methods: {
        toFather () {
          this.$emit('myFunction', this.form)   //向父组件传值,第一个参数为父组件要绑定的函数名,第二个为要传的值
        }
      }
    

    父组件:

       <div>
         我是父组件
         <Brather @myFunction="toshow"></Brather>
       </div>
    
      methods: {
        toshow (msg) {
          console.log(msg) //接受一个参数,该参数则为接收的值
        }
      }
    
    1. this.$emit('input',value)和v-model
      v-model这个双向绑定相当于做了两个操作:
      给当前这个组件添加了一个value属性;
      给当前这个组件绑定了一个input事件;
      通常用在input等组件上
      子组件:
    <div>
        我是brather组件
        <input @input="toFather" v-model="content">  //绑定input事件 ,只要输入就能使其传入父组件
    </div>
    
     props: ['value'],  //即父组件v-model的值
      data () {
        return {
          content: ''
        }
      },
      methods: {
        toFather () {
          this.$emit('input', this.content) //传入父组件
        }
      }
    

    父组件:

       <div>
         我是父组件
         <Brather v-model="faContent"></Brather>
       </div>
    
     data () {
        return {
          faContent: ''
        }
      },
      created () {
      },
      components: { Brather },
      watch: 
        faContent:function(){
          console.log('father', this.faContent)  //子组件变化,父组件也会跟着变化
      }
    
    1. $refs

    官方: $refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 $refs。

    父组件可以通过此拿到子组件实例,data值和方法
    子组件:

    <div>
        我是brather组件
    </div>
    
      data () {
        return {
          content: '我是子组件啦啦啦'
        }
      },
      methods: {
        myfunction () {
          console.log('我是方法')
        }
      }
    

    父组件:

       <div>
         我是父组件
         <Brather ref="myson"></Brather>
         <button @click="toMySon"></button>
       </div>
    
     data () {
        return {
        }
      },
      created () {
      },
      components: { Brather },
      methods: {
        toMySon () {
          console.log(this.$refs.myson.content)
          this.$refs.myson.myfunction()
        }
      }
    

    兄弟通信

    1.bus中央总线
    借助一个媒介传值
    创建一个eventBus.js

    import Vue from 'vue'
    export default new Vue()
    
    //哥哥
    <div>
        我是brather组件
        <button @click="myBrother">传值给老弟</button>
    </div>
    
    import bus from './eventBus'
    
      data () {
        return {
          content: '我是哥哥组件啦啦啦'
        }
      },
      methods: {
        myBrother () {
          bus.$emit('button', this.content)
        }
      }
    

    弟弟

    import bus from './eventBus'
    export default {
      created () {
        bus.$on('button', (msg) => {
          console.log(msg)
        })
      }
    }
    

    任意关系均可使用此方法

  • 相关阅读:
    01 React快速入门(一)——使用循环时对于‘key’报错处理
    01 div实现浮动效果
    17 制作热力图
    16 ArcGIS Server 10.6.1发布影像服务
    虚拟机上有关于Apache服务基于主机名@4域名访问网页
    虚拟机上有关于Apache服务基于IP地址@3IP访问网站
    Apache有关个人用户主页以及强制访问安全系统功能介绍@2
    Apache服务的安装以及服务文件参数内容的配置 @1
    WVware虚拟机linux环境下使用ssh服务以安全密钥的形式远程控制服务(本地客户端登录远程服务端)
    WVware虚拟机linux环境下RAID5 五块磁盘操作管理实例
  • 原文地址:https://www.cnblogs.com/xmjs/p/13514573.html
Copyright © 2020-2023  润新知