如何在 Angular 中显示具有自己路由的父组件内的特定子组件?

Posted

技术标签:

【中文标题】如何在 Angular 中显示具有自己路由的父组件内的特定子组件?【英文标题】:How can I display a specific child component inside a parent component with its own routing in Angular? 【发布时间】:2021-03-04 09:42:01 【问题描述】:

我可以很方便的在父组件中显示子组件,但是如何根据路由切换子组件的显示呢?

是否可以不使用 *ngIf 来隐藏和显示子组件来创建这样的路由机制?

我有一个个人资料页面,例如。 ../成员/编辑

当你第一次路由到我要加载并显示子组件的页面时

<app-profile-menu-items>

喜欢这个

<app-parent-component class="container">
  <div class="col-2">
    // general info 
  </div>
  <div class="col-10">
    // child component here
    // only want to show 1 child at a time based on some routing
    <app-profile-menu-items></app-profile-menu-items>
  </div>
</app-parent-component>

这个子组件&lt;app-profile-menu-items&gt;

有一个选项列表(链接)可供选择(/member/edit/info、/member/edit/images 等),单击时应显示该子组件并隐藏

&lt;app-profile-menu-items&gt; // 显示下方时隐藏

<app-profile-menu-info></app-profile-menu-info>
<app-profile-menu-images></app-profile-menu-images>
<app-profile-menu-location></app-profile-menu-location>

此外,路由将如何工作。 path: 'edit/info',我会为组件使用什么?

 path: 'edit', component: MemberEditComponent, resolve: user: MemberEditResolver, canDeactivate: [PreventUnsavedChangesGuard],

【问题讨论】:

您需要一个延迟加载模块,该模块将使用路由器出口加载父组件并路由到不同的子组件。 您的应用父组件是通过其选择器注入模板还是路由组件? Ugur - 它是一个路由组件 Jean - 你有什么例子可以指点我吗? 【参考方案1】:

你的父模板应该是这样的,它应该有 routerOutlet:

<app-parent-component class="container">
    <div class="col-2">
      // general info 
    </div>
    <div class="col-10">
      // child component here
      // only want to show 1 child at a time based on some routing
      <router-outlet></router-outlet>
    </div>
</app-parent-component>

以及您在路由模块中的路线:

const routes: Routes = [

    path: '',            //<---- parent component declared here
    component: ParentComponent,
    children: [                          
        
            path:'child-1',
            component: Child1Component  // <-- Child component 
        ,
        
            path:'child-2',
            component: Child2Component  // <-- Child component 
        ,
        
            path:'child-3',
            component: Child3Component // <-- Child component 
        
    ]
 
];

【讨论】:

你好,Arashatami。它如何知道为孩子加载默认组件?前任。 嗨,我编辑我的答案,使用空路径并为父级编写正确的组件,作为我为您编写的示例路由模块加载父级,然后在父组件路由器出口加载子级的模板中。跨度> 【参考方案2】:

您可以如下设置路线。

const routes: Routes = [
    
        path: 'parent-component',            //<---- parent component declared here
        component: ParentComponent,
        children: [                          
            
                path:'profile-menu-items',
                component: ProfileMenuItemsComponent  // <-- Child component 
            ,
            
                path:'profile-menu-images',
                component: ProfileMenuImagesComponent  // <-- Child component 
            ,
            
                path:'profile-menu-location',
                component: ProfileMenuLocationComponent // <-- Child component 
            
        ]
     
  ];

【讨论】:

Kavinda - 谢谢,那 html 呢?如何构造html代码? 嗯!我不明白你的评论。 这种方式是正确的 // 这里的子组件 // 只想根据一些路由一次显示 1 个子组件 你是说 Angular 会根据我的路由自动隐藏/显示吗?

以上是关于如何在 Angular 中显示具有自己路由的父组件内的特定子组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Angular 6 中的父组件访问子组件中的表单?

Angular2 - 具有登录结构的路由器插座

如何在 Angular 6 的“/about”路由器中仅显示关于组件内容?

出于测试目的,如何在 angular2 中模拟已激活的父路由?

如何在Angular 11中显示来自另一个组件的模态组件

Angular 2如何将变量从父组件传递到路由器出口