美文网首页
Vue组件通信

Vue组件通信

作者: 九瀺 | 来源:发表于2019-12-30 15:41 被阅读0次

    父子组件相互通信

    1. 父传子 父组件在调用的子组件标签上添加额外属性,如v-bind:message="msg" 将父组件中的msg属性传递给子组件(如果传递死数据,可以不使用指令)
      子组件通过props来接受父组件传递的数据,如props:{'message'}
      子组件接收和父组件传递名称必须一样
    2. 子组件自定义事件,通过$emit 向父组件传递数据,如 子组件
    onClick(){
      this.$emit('showData',{name:'hello'})
    }
    

    父组件调用:

    <child @showData = 'show'></child>
    
    methods(){
      show(data){
      this.name = data.name
      }
    }
    
    
    1. 父组件访问子组件可以使用$children来获取一个包含所有子组件(vueCommponet)的数组,可以通过下标
      索引来获取相对应的子组件的数据。
      子组件访问父组件可以使用$parent来获取父组件的数据(不推荐)
    2. 向子组件添加ref属性,父组件通过$refs根据ref属性值来定位子组件,从而获取子组件的数据
      $refs 只会在组件渲染完成之后生效,并且它们不是响应式的。这仅作为一个用于直接操作子组件的“逃生舱”——你应该避免在模板或计算属性中访问 $refs。

    非父子组件通信

    1.通过父组件进行通信
    2.通过建立公共仓库进行通信
    在所有组件最上层建立一个中央事件总线(bus)

    import Vue from 'vue'
    var PublicEvent = new Vue()
    export default PublicEvent
    

    如 从组件1调用组件2 中的方法和数据
    在组件1和2中都需要引入中央事件总线PublicEvent
    在组件2 中,定义一个事件,通过该事件触发PublicEvent.$emit('名称',需要传递的值)

    在组件1中,通过钩子函数mounted在初始化组件时调用PublicEvent.$on('名称',func)

    相关文章

      网友评论

          本文标题:Vue组件通信

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