【问题标题】:Angular2 Router NavigationAngular2 路由器导航
【发布时间】:2018-06-08 07:38:28
【问题描述】:

我正在尝试在我的应用程序中测试路由器导航,但是每​​次我尝试导航到我的网址时,我都会返回主页。

当用户选择一行来完成表单时,路由器应该导航到下一页,如下所示:

  onUserRowSelect(event): void {
    this.router.navigate(['myform']);}

但是,myforms 没有被导航到,这是我定义路线的方式:

    const routes: Routes = [
  {
    path: '',
    component: UserAdminComponent,
    children: [
      {
        path: 'createuser',
        component: CreateUserComponent
      },
      {
        path: 'updateuser',
        component: UpdateUserComponent,
        children: [
          {
            path: 'myform',
            component: UpdateFormComponent,
          }
        ]
      },
    ]
  },

];

所以导航到myURL/useradmin/updateuser/myform 根本不起作用(如果子路由甚至工作)。

如果需要,我可以详细说明。谢谢

【问题讨论】:

    标签: angular typescript web routing


    【解决方案1】:

    您应该提供从父级开始的完整路径

       this.router.navigate(['useradmin','updateuser','myform']);}
    

    【讨论】:

      【解决方案2】:

      如果要导航到当前路由的子路由(例如从updateuserupdateuser/myform),可以使用相对导航:

      import { Router, ActivatedRoute } from '@angular/router';
      
      constructor(
          private route: ActivatedRoute,
          private router: Router) { 
      }
      
      onUserRowSelect(event): void {
          this.router.navigate(['./myform'], { relativeTo: this.route });
      }
      

      您可以在this detailed answerTetraDev 中找到更多导航案例。


      更新:如果导航时UpdateFormComponent要替换UpdateUserComponent,那么它们都应该是UserAdminComponent的直接子代:

        const routes: Routes = [
        {
          path: '',
          component: UserAdminComponent,
          children: [
            {
              path: 'createuser',
              component: CreateUserComponent
            },
            {
              path: 'updateuser',
              component: UpdateUserComponent
            },
            {
              path: 'myform',
              component: UpdateFormComponent
            }
          ]
        }];
      

      并且导航将以这种方式执行:

      onUserRowSelect(event): void {
          this.router.navigate(['../myform'], { relativeTo: this.route });
      }
      

      【讨论】:

      • 抱歉回复晚了,url变了但是组件没有渲染。
      • 如何导出/导入这些路由?你使用RouterModule.forChild(routes)(见this article)吗?您可以在问题中显示该代码吗?
      • 在同一个路由组件中:export const routing = RouterModule.forChild(routes);
      • 你在组件的模块中导入这些路由?
      • 有点复杂,我准备一个plunkr来看看。
      猜你喜欢
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2016-11-17
      • 2017-02-26
      • 2016-10-29
      • 2017-05-07
      相关资源
      最近更新 更多