【问题标题】:Dynamically add child routes in Vuejs在 Vuejs 中动态添加子路由
【发布时间】:2018-07-27 16:22:11
【问题描述】:

根据this官方的例子,我们可以在vuejs中添加嵌套/子路由。但是我找不到任何关于动态添加这些子路由的方法的帮助/文档。例如,仅在访问父路由时添加子路由。

目前,Vue 应用程序中的所有路由都定义在我们创建路由器实例的一个地方。有一个名为 addRoutes 的 api,但我不知道如何使用它在其路由旁边添加延迟加载的应用程序功能。如果有人熟悉 Angular2+ 模块系统,那么它就有能力为该模块内的功能模块定义路由,甚至使它们延迟加载。想知道 VueJs 是否可以实现某些目标?

【问题讨论】:

    标签: vue.js lazy-loading vue-router dynamic-routing


    【解决方案1】:

    您可以使用$router.addRoutes 重新添加路由,指定子级。

    您需要通过在$router.options.routes 数组中搜索与当前$route.path 匹配的路由定义对象来获取当前路由定义(而不是$route 对象)。然后向对象添加一个children 路由定义数组并将其传递给$router.addRoutes

    created() {
      let { routes } = this.$router.options;
      let routeData = routes.find(r => r.path === this.$route.path);
      routeData.children = [
        { path: 'bar', component: Bar },
        { path: 'baz', component: Baz },      
      ];
      this.$router.addRoutes([routeData])
    }
    

    Here's an example fiddle of dynamically adding child routes in the created hook of a route's component definition.

    【讨论】:

    • 感谢您的回答。最后一块拼图。当我们通常在客户端导航时它可以工作,但在子路径上完全重新加载时它会中断。完整的 realod 以 404 结束。
    • 2018年12月子路径(f5)完全重载有什么办法吗?
    • 仍然无法通过页面刷新来保存这些数据。如果 Vue 路由器想要对抗 React Router 之类的东西,它真的需要这个功能。
    • 路由器是反应式的,所以即使丢失的路由在完全重新加载后也可以工作,如果路由随后添加到页面。除非有带有重定向的 * 路由,否则这应该可以工作。见codesandbox.io/s/vue-dynamic-components-owhwr
    猜你喜欢
    • 2020-12-13
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 2021-06-12
    • 1970-01-01
    • 2019-03-02
    • 2021-10-02
    相关资源
    最近更新 更多