vue实践之兄弟组件之间数据和事件的传递

    使用vue进行组件化开发时,经常会遇到需要在业务组件中监听某个公共组件的数据变化和事件触发。大致归类为两种场景:

  1. 业务组件为公共组件的直接父组件(父子关系)

    *事件传递:
    子组件定义一个方法,方法中通过this.$emit(‘event’)方式将触发事件传递出来;就可以在父组件中监听event事件,当事件触发时,执行自定义的方法。
    *数据传递:
    同样使用\$emit,在传递事件的同时将数据作为参数传递出去,父组件调用时,让本组件的数据等于传递过来的参数即可

    //子组件GlobalHeader中定义方法

    branchChenge () {
      this.$emit('branch-click', this.branch)
    }
    

    //父组件监听branch-click事件触发时执行函数

    <global-header @branch-click="branchClick"></global-header>
    

    //让本组件的数据等于传递过来的参数,实现事件和数据的传递

    branchClick: function (branch) {
      this.branch = branch
      alert(this.branch)
    }
    
  2. 业务组件与公共组件在同一个父组件下(兄弟关系)

    这篇帖子主要说这种情况,如图:
    在这里插入图片描述
    代码:

    <template>
      <el-container>
        <sider-menu></sider-menu>
        <el-container direction="vertical">
    	  <!-- global-header公共组件 -->
          <global-header @branch-click="branchClick" @sys-click="sysClick"></global-header>
          <el-main>
    		<!-- router-view业务组建 -->
            <router-view ref="viewArea"></router-view>
          </el-main>
          <global-footer></global-footer>
        </el-container>
      </el-container>  
    </template>
    

    业务场景:
    分支渠道选择组件global-header与业务组件router-view在同一个父组件下,业务组件需要监听分支渠道信息的变化来刷新页面数据。
    思路:
    两个组件拥有同一个父组件,考虑通过父组件作为中间组件,实现子组件之间的事件、数据传递。
    实现:
    1.通过父组件监听global-header组件的事件和数据变化,同场景一;
    2.router-view组件中定义刷新数据方法updData(),传递到父组件,由父组件代替子组件执行;

    //router-view组件中定义刷新数据方法

    updDataFn (branch, sysId) {
        this.branch = branch
        this.sysId = sysId
        this.getUserInfo()
    }
    //父组件中引用router-view组件时,添加一个标识符 ref='viewArea' 
    //然后父组件可以通过this.$refs.viewArea.updDataFn(branch, sysId)
    //获取到子组件的方法
    branchClick: function (branch, sys) {
        this.updData(branch, sys)
    },
    sysClick: function (branch, sys) {
        this.updData(branch, sys)
    },
    updData (branch, sysId) {
       if (branch && sysId) {
         this.$refs.viewArea.updDataFn(branch, sysId)
      }
    }
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值