springboot+vue全栈开发(2)--路由拼接参数实现组件切换

1.需求分析:

在很多的页面中共用布局来实现组件切换,例如在下述中,需要点击,个人资料,消息通知分别呈现不同的页面
在这里插入图片描述

2.实现思路:

点击不同的按钮的时候为路由拼接参数,通过vue-router来获取拼接的参数,通过v-if来控制组件的显示,还有一种实现的方式就是使用子路由通过router.push到不同的组件中

(1)导包

import { useRoute } from "vue-router";

(2)获取参数

const route=useRoute()

(3)为每一菜单创建点击事件

const changePath = (pagePath) => {
router.push({ query: { page: pagePath } });
};

(4)组件中调用函数

<el-menu
              :default-active="acitve_index"
              class="el-menu-vertical-demo"
              style="margin-top: 100px"
            >
              <el-menu-item
                index="1"
                @click="changePath('myInfo')"
              >
                <el-icon><User /></el-icon>
                <span>个人资料</span>
              </el-menu-item>
              <el-menu-item
                index="2"
                @click="changePath('messageTip')"
              >
                <el-icon><ChatDotRound /></el-icon>
                <span>消息通知</span>
              </el-menu-item>
              <el-menu-item
                index="3"
                @click="changePath('updatePwd')"

              >
                <el-icon><Lock /></el-icon>
                <span>修改密码</span>
              </el-menu-item>
            </el-menu>

通过上述操作之后就会发现,即使是点击菜单之后,url中的参数确实发生了变化,但是页面没有切换,需要手动点击刷新之后才可以却换
这个时候需要在父组件中控制router-view消失之后在渲染一次就可以达到效果

(4)重新渲染页面

在app.vue中创建变量让他首先为true,触发未来reload函数之后,让页面不刷新的情况下重新渲染一次
需要注意的是,子父页面中的provide和inject函数都是成对出现的
在这里插入图片描述
在个人中兴中调用reload函数,改造点击事件

const reload = inject("reload");
const changePath = (pagePath) => {
  router.push({ query: { page: pagePath } });
  route.query.page = pagePath;
  reload(); //重新渲染页面
};

在完成上述操作之后,整个的效果就实现了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT民工小新

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

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

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

打赏作者

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

抵扣说明:

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

余额充值