如何在角度2中默认加载子路由

Posted

技术标签:

【中文标题】如何在角度2中默认加载子路由【英文标题】:How to load child route by default in angular 2 【发布时间】:2017-06-02 16:21:51 【问题描述】:

在应用程序开始时,我想加载子路由。

现在 URLcome,但相应的组件没有加载到该部分,但是当再次点击它的实际 URL 时。

就像路由配置是

  const appRoutes: Routes = [
         path: 'a', component: AComponent,
         children:[
                    path:'x',component:AXcomponent 
                   ]
        ,
         path: 'b', component: bComponent, 
]

现在我想加载路径 a/x 我将如何在页面开头加载?

【问题讨论】:

可能我没有理解正确,但是你应该可以使用 path: '', redirectTo: '/a/b', pathMatch: 'full' , 让你的空路径''重定向到'/a/b'然后加载对应的组件。跨度> 设置了不工作的 url 但第一次未加载组件但点击直接 url 然后加载 【参考方案1】:

自动添加空路径路由作为重定向

const appRoutes: Routes = [
    
        path:'',
        redirectTo: 'a',
        pathMatch: 'full' 
    ,
    
        path: 'a',
        component: AComponent,
        children:[
            
                path:'',
                redirectTo: 'x',
                pathMatch: 'full' 
            ,
            
                path:'x',
                component: AXcomponent 
            
        ]
    ,
     
        path: 'b',
        component: bComponent
    
];

【讨论】:

在 url 的变化就像 url set /a/b 但是没有加载相应的组件 它的工作,感谢我的代码中有一些错误现在它工作了。:) 太好了...很高兴我能帮上忙! 如果子路由包含出口会怎样? @LuisRuizFigueroa 你对出口场景有什么想法吗?【参考方案2】:

如果您的子路线包含出口,则接受的答案无效。

例如,我按 ID 显示“订单”,并为摘要和其他面板使用命名的出口“详细信息”。

/orders/5000001/(detail:summary)
/orders/5000001/(detail:edit)

因为这些 URL 太丑了,我还希望以下两个重定向:

/orders/5000001           =>    /orders/5000001/(detail:summary)
/orders/5000001/summary   =>    /orders/5000001/(detail:summary)

所以我在孩子中尝试了无组件重定向:

 path: '', pathMatch: 'full', redirectTo: '(detail:summary)' 

这失败了,因为'redirectTo' 需要是绝对的(我确信这有一个复杂的技术原因)。所以我尝试了这个:

 path: '', pathMatch: 'full', redirectTo: '/order/:id/(detail:summary)' 

这失败了,因为:id 不是子上下文中的命名变量。

所以最后我想通了:

 children: [

      path: ':id', pathMatch: 'full', redirectTo: '/orders/:id/(detail:summary)' ,
      path: ':id/summary', pathMatch: 'full', redirectTo: '/orders/:id/(detail:summary)' ,
     
         // this goes in the main router outlet
         path: ':id', component: OrderFulldetailsComponent,

         children: [

              path: 'summary', component: OrderSummaryComponent, outlet: 'detail' ,
              path: 'edit', component: OrderEditComponent, outlet: 'detail' 
         ]
     
 ]

请注意,在path: ':id' 上执行pathMatch: 'full' 很重要,否则当您点击/:id/(detail:summary) 时它会匹配,但无处可去。

【讨论】:

以上是关于如何在角度2中默认加载子路由的主要内容,如果未能解决你的问题,请参考以下文章

从路由加载子组件时从父组件触发子组件方法

如何在运行某些代码之前等待 flash (as2) 加载子元素?

如何在 Entity Framework 6.1 中仅加载子对象的某些字段?

ext-4.2.1.883 页面加载子页面

Delphi动态加载子窗体名到MainMemu进行窗体切换

如何在角度 2 的新选项卡中打开路由 url?