如何在vue组件中动态的删除路由的子组件或添加路由的子组件吗

如何在vue组件中动态的删除路由的子组件或添加路由的子组件吗
遇到的问题是,在登录页面登录成功后台传过来权限,前端收到权限后,不知道如何去删除或者添加路由了,是子路由

在Vue中可以使用router.addRoutes和router.removeRoute方法来动态添加和删除路由。

// 获取动态添加的路由配置
const routes = [
  {
    path: '/newroute',
    component: () => import('@/views/NewRoute.vue'),
    name: 'New Route'
  }
]

// 动态添加路由
this.$router.addRoutes(routes);


// 删除
// 遍历所有子路由
this.$router.options.routes.forEach(route => {
  if (route.path === '/oldroute') {
    // 找到要删除的路由并删除
    const index = this.$router.options.routes.indexOf(route);
    this.$router.options.routes.splice(index, 1);
    // 更新路由
    this.$router.matcher = new VueRouter({routes: this.$router.options.routes}).matcher;
  }
});

一般需要根据不同角色设置路由菜单让后端将路由菜单返回给你比较好,或者你可以在本地路由中设置一个放置权限码的地方,例如

img


然后在路由守卫中判断是否有这个权限,否则跳转首页或者404

img

vue-router官方的动态添加路由规则的API,删除的话没有API,直接F5刷新之后,动态添加的就不存在了,需要重新添加

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7719962
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:关于在vue中父组件更改子组件的样式,而不影响子组件在其他组件的样式。
  • 除此之外, 这篇博客: vue中子组件修改父组件中传入的数据中的 一、子组件能否直接修改父组件中传入的数据? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 官方文档(单项数据流,你不应该在一个子组件内部改变 prop)给出的答案是否定的。
    虽然官方建议不要在组件内部修改prop,但是在现实中,修改组件内部的prop实属平常事(*当你传入的prop为Object类型的时候,修改组件内部的prop可以对应的改变父组件中的值。如果传入的prop为简单类型(例如String,Number等)时,浏览器会报错,提示不能修改prop的值。)
    那么,这样做有什么问题呢?
    这样会导致父组件的数据指向不明,容易出现渲染问题。

  • 您还可以看一下 刘建萍老师的Web前端开发经典案例之vue框架开发电商项目百草味案例(一)课程中的 在商品列表部分点击商品添加购物车按钮触发的事件小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    在Vue中,我们可以通过动态传递参数的方式,控制路由的子组件的添加和删除。具体步骤如下:

    1.在路由配置文件中,定义动态路由。例如:

    {
      path: '/dashboard',
      name: 'Dashboard',
      component: Dashboard,
      children: [
        {
          path: 'add',
          name: 'Add',
          component: Add
        },
        {
          path: 'edit/:id',
          name: 'Edit',
          component: Edit
        }
      ]
    }
    

    2.在组件中,通过编程式导航方式,实现动态添加和删除子组件。

    例如,我们可以定义一个按钮,用来控制添加和删除操作:

    <template>
      <div>
        <button @click="addSub">Add Sub Component</button>
        <button @click="delSub">Delete Sub Component</button>
        <router-view></router-view>
      </div>
    </template>
    

    在组件中,通过编写方法实现动态添加和删除子组件:

    <script>
    export default {
      name: 'Dashboard',
      methods: {
        addSub() {
          this.$router.addRoutes([
            { // 新增一个子路由
              path: 'new',
              component: NewComponent
            }
          ])
        },
        delSub() {
          this.$router.matcher.removeRoutes([
            { // 删除一个子路由
              path: 'new'
            }
          ])
        }
      }
    }
    </script>
    

    注意:上述代码仅为示意,实际代码需根据实际场景进行修改。

    另外,通过登录后获取权限信息来动态添加或删除子组件,可以在登录成功后,将权限信息存储在Vue的全局状态管理中(例如:Vuex),然后在组件中进行判断,根据权限信息动态添加或删除对应的子组件。

    总之,动态添加和删除子组件的实现方法在Vue中是比较灵活的,可以根据实际需求进行调整。