【问题标题】:Can a component know its child-routes in vue-router组件可以在 vue-router 中知道它的子路由吗
【发布时间】:2019-07-01 20:57:56
【问题描述】:
<Main>
  <router-view></router-view>
</Main>
[
  {
    path: '/',
    component: Intro,
  },
  {
    path: '/path1',
    component: Main,
    children: [{},{},{}]
  },
  {
    path: '/path2',
    component: Main,
    children: [{},{},{},{},{}]
  }
]

我想让Main 知道为它定义了哪些子路由。

我创建了一个函数来爬取整个路线对象并找出它,但它的评估方式因this.$router.currentRoute 而不同,这使得它变得冗长和可怕,并且更复杂的是孩子中的路径选项越多。是否有一种简单的方法让父组件知道它在路由中的位置并拥有其子组件的列表?

IE 中的主要组件我如何知道我有多少个孩子以及他们中的哪些当前处于活动状态?

【问题讨论】:

    标签: vue.js vue-router


    【解决方案1】:

    这会解决您的问题吗?这是sample codepen。您需要知道和设置的所有内容 - 路由名称(甚至更多 - 您可以改用 meta 甚至 path 属性)。您甚至可以创建递归函数来搜索每条路线,包括每个 children 数组。

    这是一个简单的函数来搜索知道父路径名的子组件:

    function recursiveChildrenSearch(routes, name) {
      for (let route of routes) {
        if (route.name === name)
          return route.children;
        else if (route.children.length > 0)
          return recursiveChildrenSearch(route.children, name);
      }
    }
    

    可以这样调用:

    recursiveChildrenSearch(router.options.routes, "one")
    

    在示例路由对象上调用:

    routes: [
        {
          path: '/hello',
          name: "main",
          component: A,
          children: [
            {name: 'one', path: '1', component: B, 
              children: [
                  {name: 'subone', path: '1.1', component: C}
              ]},
            {name: 'two', path: '2', component: C},
          ],
        },
      ]
    

    将返回:

    [Object { name: "subone", path: "1.1", component: {…} }]
    

    【讨论】:

    • 这是有道理的,虽然我希望从父级内部进行,IE 子路由是活动的,但父组件需要确定它是活动父级然后找到它的子级.. . (其中一个可能是活动路线,除非活动路线是那些路线的孩子......)我的路线目前尚未命名,我认为这可能使这不可能做到
    • 我认为我的解决方案是彻底重新考虑路线并在父路线上使用道具而不是路线来确定子路线。
    • 为什么你需要知道哪个孩子是活跃的?有趣的案例。
    • 是的...我们有一种多步骤组件,它使用路由器来控制步骤的进度。我正在重构它以仅使用`{path:': currentStep'} ` 会更好
    猜你喜欢
    • 2017-06-20
    • 2018-12-18
    • 2021-05-29
    • 1970-01-01
    • 2020-03-27
    • 2021-04-27
    • 2019-12-23
    • 2017-09-05
    • 2020-10-14
    相关资源
    最近更新 更多