以角度2隐藏父视图

时间:2017-02-09 06:11:48

标签: angular

我必须隐藏上面的父视图。

MySQL JOIN performance issue 以下是我的代码。当我点击任何一个父框时应隐藏孩子应该出现。

        <app-navbar></app-navbar>
        <div class="container" [style.height]='height' style="margin-top: 7%;">
            <div class="row box_rpad">
                <app-box-layout 
                                (display)="onDisplay($event)" 
                                *ngFor="let color of colors let i=index" 
                                [color]='color.hex' 
                                [text]='color.name' 
                                [id]='i'>
                </app-box-layout>               
            </div>
        </div>

        <!-- CHILD ROUTES -->
        <div class="container">
            <router-outlet></router-outlet> 
        </div>

4 个答案:

答案 0 :(得分:11)

在父组件中,像这样注入激活的路径:

class ParentComponent {
  constructor(public route: ActivatedRoute)
  }
}

现在,您可以使用children上的route属性来确定当前组件是否是路径树中的叶组件。与ngIf一起,这可用于隐藏视图的一部分:

<div *ngIf="route.children.length === 0">
  Some content that should only be shown when the user is at the parent component itself.
</div>

<router-outlet></router-outlet>

在上面的示例中,div仅在用户位于父组件本身时才会显示,但如果用户位于子组件上则不会显示。

答案 1 :(得分:4)

2021 年 1 月

您可以从父路由中删除组件。 See example here

{
    path: 'parent',
    //component: ParentComponent,
    children: [
      { path : '', pathMatch:'full', component: ParentComponent},
      { path: 'child', component: ChildComponent },
    ],
  }  

答案 2 :(得分:2)

为您调用的父组件(ParentComponent)和您调用的子组件(ChildComponent)创建单独的组件。然后,您可以设置将ParentComponent或ChildComponent加载到模板中的路由器插座的路径。这样做,ParentComponent和ChildComponent处于相同的路由级别。你必须改变他们的名字才有意义。

答案 3 :(得分:1)

以下应该可以解决这个问题....这个解决方案不是那么优化,但至少它可以按你的需要工作。因此,只需将要隐藏的内容用布尔值包装在div中,例如

<div *ngIf="notSelected">
  <!-- your code here -->
</div>

只需在处理单击父comp中某个框的事件的同一函数中将该boolean设置为false。

clicked() {
  ....
  this.notSelected = false;
}

要告知在从子级导航回父级时需要再次显示父级,您可以使用Subject。所以在你的父母中声明一个主题:

public static showParent: Subject<any> = new Subject();

并在您的父构造函数中订阅更改:

constructor(...) {
  ParentComponent.showParent.subscribe(res => {
     this.notSelected = true; // show parent component
  })
}

并且在您的孩子中,在导航回父母之前,无论该事件是什么:

returnToParent() {
  ParentComponent.showParent.next(false);
  this.router.navigate......
}