Vue 实现不同的路由共用一个组件component的缓存问题+VUE传参问题

路由缓存的实现逻辑见这个:

Vue keep-alive 缓存路由和刷新路由_vue刷新缓存路由_Teln_小凯的博客-CSDN博客

实现不同的路由共用一个组件component,可直接配置不同的名字指向同一个组件,下面是2个菜单的配置

 然后要实现共用且缓存的话,需要对ruterview加一个key即可实现::key="$route.fullPath"

<keep-alive :exclude="exclude">
        <router-view v-if="!refreshing" :key="$route.fullPath"></router-view>
      </keep-alive>

 关于默认参数的使用

1、先配置页面参数

 2、动态绑定到mate里面

routerConfig.children.push({
      path: menu.url,
      component: loadComponent(menu.component_path),
      meta: {
        componentName: menu.component_name,
        //外部参数
        params: menu.params,
      }
    });

3、前置路由把值给加到本地缓存

if (to.meta.params != undefined && to.meta.params != "") {
    setUrlQuery(to.path,to.meta.params)
  }


//路由前置守卫
router.beforeEach((to, from, next) => {
  NProgress.start();
  //有登录且没有路由的时候,手动绑定一次路由,解决刷新菜单丢失问题
  if (getAuthorization() != null && store.state.menu.dynRouterLoaded == false) {
    var localMenus = localStorage.getItem(process.env.ADMIN_MENUS_KEY)
    if (localMenus != null) {
      router.initRouter(JSON.parse(localMenus));
    } else {
      router.initRouter([]);
    }
    next({ ...to, replace: true });
  }
  if (to.meta.needLogin == false) {
    //不需要登录
    return next();
  }
  //没有token直接去登录页面
  if (getAuthorization() == null) {
    return next({ path: "/login" });
  }
  const homeUrl = MenuUtil.getHomeUrl();
  //解决回退时进入首页的BUG
  if (to.path == process.env.PATH && homeUrl != "") {
    return next({ path: homeUrl });
  }
  if (to.meta.params != undefined && to.meta.params != "") {
    setUrlQuery(to.path,to.meta.params)
  }
  next();
});

4、页面取值即可

name: "pageIndex",
    data() {
      
      return {
        //第三方网站
        webUrl: getUrlQuery(this.$route.path).url,
      };
    },

实现效果

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue界面开发中,经常需要多个路由使用同一个页面,例如在一个电子商务应用中,所有的产品列表页面都具有相似的布局,但它们会被分配在不同路由中,需要在这种情况下对Vue进行相应的配置。 Vue Router允许你通过定义多个路由路径指向同一个组件来解决这个问题。当你需要使用一个页面作为多个路由的出口时,你可以使用“别名”来解决这个问题。下面是一个使用别名的示例: ```javascript const router = new VueRouter({ routes: [ // 路由A { path: '/routeA', component: YourComponent }, // 路由B { path: '/routeB', component: YourComponent, alias: '/routeC' }, // 路由D { path: '/routeD', component: YourComponent } ] }) ``` 在这个例子中,如果用户访问路由B或路由C,他们都将呈现您指定的组件。因此,您可以使用alias选项,将多个路由路径指向同一个组件,从而简化路由配置。 此外,你还可以使用Vue Router的嵌套路由来处理这种情况。嵌套路由意味着一个路由可以包含另一个路由,从而允许组件根据不同的url路径具有不同的子组件。例如: ```javascript const router = new VueRouter({ routes: [ // 路由A { path: '/routeA', component: ParentComponent, children: [ // 嵌套路由B { path: 'routeB', component: ChildComponent } ] }, // 路由C { path: '/routeC', component: ParentComponent, children: [ // 嵌套路由D { path: 'routeD', component: ChildComponent } ] }, ] }) ``` 在这个例子中,如果用户访问路由A和它的子路由B,他们将呈现ParentComponent和ChildComponent,如果用户访问路由C和它的子路由D,他们将呈现相同的组件,但仍然具有独立的路由路径。 总之,在Vue界面开发中,多个路由共用一个页面问题很常见,你可以使用别名或嵌套路由来处理这种情况,从而更加方便地组织你的应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值