兄弟组件之间调用方法

业务需求: 要在router-view这个路由出口的组件中调用 aside-left组件中的方法。

理清关系:
aside-left组件和router-view之间是兄弟组件的关系;
router-view与它的出口组件之间其实可以看作父子组件;

总结:
兄弟组件之间调用方法:
组件上用ref进行表示 ==> this.$refs.child1Container.selectZonghenengli();

总结构:

<template>
  <el-container class="layout_container">
    <el-header height="auto"
      ><header-top :show="manage" :username="name"></header-top
    ></el-header>
    <el-container>
      <el-aside width="auto"
        ><aside-left @menuSlect="menuSlect" ref="child1Container"></aside-left
      ></el-aside>
      <el-main>
        <router-view :asideNav="navItem" @tiaozhuan="tiaozhuan"></router-view>
      </el-main>
    </el-container>
  </el-container>
</template>
<script>
import HeaderTop from "../../components/layout/header";
import AsideLeft from "../../components/layout/aside";

import { getuserInfo } from "@/api/login";
export default {
  components: {
    HeaderTop,
    AsideLeft,
  },
  data() {
    return {
      //是否显示能力图谱管理按钮,以及获取用户信息
      manage: null,
      name: null,
      //导航项
      navItem: null,
    };
  },
  created() {
    this.getRoleInfo();
  },
  methods: {
    //获取个人信息,渲染header
    async getRoleInfo() {
      const { data: resolve } = await getuserInfo();
      console.log(resolve);
      this.name = resolve.name;
      if (resolve.roleId == 1) {
        this.manage = true;
      } else {
        this.manage = false;
      }
    },
    //传递asider的导航
    menuSlect(data) {
      // console.log(data)
      this.navItem = data;
    },
    //重点看这里:此处是监听路由出口,出口组件中的方法//
    tiaozhuan() {
    /触发兄弟组件的方法///
      this.$refs.child1Container.selectZonghenengli();
    },
  },
  computed: {},
};
</script>
<style scoped>
</style>

aside-left组件:

<template>
  <div class="aside_container">
    <el-menu
      @select="selectedMenu"
    >
      <el-menu-item v-for="(item,i) in asideNav" :key="i" :index="i+''"  
      :class="item.type == selectNav ? 'active' : '' " 
      @click="selectedMenuItem(item.type)"
      >
          <img  :src="item.type == selectNav ? require(`../../assets/aside/${item.src.active}.png`) : require(`../../assets/aside/${item.src.def}.png`)" alt="" />
          <span slot="title">{{item.title}}</span>
      </el-menu-item>
    </el-menu>
  </div>
</template>
<script>
export default {
  data() {
    return {
      asideNav: [
        {title:"综合能力",type:"zonghe",src:{def: "zonghe",active:"zongheactive"}},
      ],
      selectNav: null
    };
  },
  created() {
    //保存激活的选项
    if(!window.sessionStorage.getItem('selectNav')) {
        window.sessionStorage.setItem('selectNav','zonghe')
    };
    this.selectNav = window.sessionStorage.getItem('selectNav');
    this.$emit("menuSlect",this.selectNav)
  },
  methods: {
    selectedMenu(key, keyPath) {
    },
    selectedMenuItem(type) {
        window.sessionStorage.setItem('selectNav',type)
        this.selectNav=type
        this.$emit("menuSlect",this.selectNav)
    },
    ///所要调用的方法//
    selectZonghenengli() {
      this.selectNav="ruanjian"
      this.$emit("menuSlect",this.selectNav)
      window.sessionStorage.setItem('selectNav',"ruanjian")
    }
  },
  computed: {},
};
</script>
<style scoped>
</style>

路由出口组件:

this.$emit('tiaozhuan');

欢迎随时私信,一起探讨问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南朝听月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值