使用CRUD设置激活具有多级嵌套路由的路由器链接

Sye*_*yed 9 javascript vue.js vue-router

我想安装深度嵌套像下面,我有点不确定,我们不能用exactrouter-link嵌套的路线.

<div id="app">
  <nav class="nav nav-main">
    <router-link exact to="/" class="nav-link" activeClass="active">Dashboard</router-link>
    <router-link to="/projects" class="nav-link" activeClass="active">Projects</router-link>
  </nav>

  <div class="parent-content">
    <h4>Content for Parent goes here</h4>
  </div>

  <router-view>
    <nav class="nav nav-main">
      <router-link :to="'/projects/' + $route.params.projectId" class="nav-link" activeClass="active">Deals</router-link>
      <router-link :to="'/projects/' + $route.params.projectId + '/commitments/'" class="nav-link" activeClass="active">Commitments</router-link>
    </nav>
    <router-view>
      <div class="child-content">
        <h4>Content for Child goes here</h4>
      </div>
    </router-view>
  </router-view>
</div>
Run Code Online (Sandbox Code Playgroud)

我的路线:

routes: [
  {
    path: '/',
    component: Dashboard
  },
  {
    path: '/projects',
    component: Projects
  },
  {
    path: '/projects/:id',
    name: 'projects-detail',
    component: ProjectDetails,
    children: [
      // DEALS
      {
        path: '/projects/:projectId/deals',
        component: Deals
      },
      {
        path: '/projects/:projectId/deals/:dealId/details',
        component: DealDetails
      },
      // COMMITMENTS
      {
        path: '/projects/:projectId/deals/:dealId/commitments/:commitmentId/edit',
        component: CommitmentEdit
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

通过上面的设置,我需要激活路由器链接,当路由是:
/projects/:projectId/deals/:dealId/details然后激活Deals
/projects/:projectId/deals/:dealId/commitments/:commitmentId/edit然后激活Commitments

Nik*_*aut 6

我认为你没有其他<router-view></router-view>内部 ProjectDetails组件添加这个并尝试.

同样/projects/:projectId从父路径中删除所有子路径path: '/projects/:id',

所以最后你的路线是

routes: [
  {
    path: '/',
    component: Dashboard
  },
  {
    path: '/projects',
    component: Projects
  },
  {
    path: '/projects/:id',
    component: ProjectDetails,
    children : [
      // DEALS
      {
        path: 'deals/:dealId/details',//path will be /projects/:projectId/deals/:dealId/details
        component: DealDetails
      },
      {
        path: 'deals',.// path will be /projects/:projectId/deals
        component: Deals
      },
      // COMMITMENTS
      {
        path: '/deals/:dealId/commitments/:commitmentId/edit/',
        component: CommitmentEdit
      }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

这是工作小提琴:https://jsfiddle.net/chyLjpv0/16/

了解更多关于孩子的路径.

如果你不需要和组件依赖于父母不要让它像孩子一样直接用作根路径

routes: [
  {
    path: '/',
    component: Dashboard
  },
  {
    path: '/projects',
    component: Projects
  },
  {
    path: '/projects/:id',
    component: ProjectDetails,
   },
    // DEALS
    {
      path: '/projects/:projectId/deals/:dealId/details',
      component: DealDetails
    },
    {
      path: '/projects/:projectId/deals',
      component: Deals
    },
    // COMMITMENTS
    {
      path: '/projects/:projectId/deals/:dealId/commitments/:commitmentId/edit/',
      component: CommitmentEdit
    }
]
Run Code Online (Sandbox Code Playgroud)

工作小提琴:https://jsfiddle.net/chyLjpv0/17/

router-link-exact-active已经在这个例子中工作:https://jsfiddle.net/chyLjpv0/18/将链接显示为活动

在你的编辑中

你放到<router-view>里面的原因<router-view>.外在只是在被替换而且内在<router-view>是毫无价值的.使用<router-view>在父组件的子组件.

你的内心<router-view>也没有正常关闭</router-view>