Angular 子组件如何在子组件初始化时控制其自身在父组件中的可见性?
父组件中有两个可互换的子组件,其可见性由父变量showList控制Angular 子组件如何在子组件初始化时控制其自身在父组件中的可见性?,angular,output,angular6,behaviorsubject,Angular,Output,Angular6,Behaviorsubject,父组件中有两个可互换的子组件,其可见性由父变量showList控制 <div id="parent"> <app-child-1 *ngIf="showList"></app-child-1> <app-child-2 *ngIf="!showList"></app-child-2> </div> 如何在初始化时从子组件控制父变量“showList” 我试图用Output和BehaviorSubject来更
<div id="parent">
<app-child-1 *ngIf="showList"></app-child-1>
<app-child-2 *ngIf="!showList"></app-child-2>
</div>
如何在初始化时从子组件控制父变量“showList”
我试图用Output和BehaviorSubject来更改它,但这两个选项在初始化时都不起作用 看起来
showList
是父组件的属性。这意味着父组件可以设置其值。是否希望子组件“告诉”父组件它们希望显示?如果是这样,您必须在子组件上声明一个事件,并与父组件一起侦听它。我猜子组件上会有一个控件导致视图切换,因此基本上子组件请求隐藏,而不是显示
编辑:由于您希望子组件在运行时决定其中哪一个是要显示的组件,因此您不能让*ngIf
隐藏它们,因为如果它们被隐藏,它们甚至不会被实例化,并且它们无法运行任何导致它们重新出现的代码。在这种情况下,您需要将它们全部显示出来,但使用CSS将其隐藏在视图中
子组件中的事件可以这样声明:
@Output()hideMe=neweventemitter();
父组件的侦听是这样完成的:
以及随附的CSS:
.hidden{display:none;}
然后在子组件逻辑中,当发出事件时,您应该执行以下操作:
this.hideMe.emit();
是的,我尝试过这个选项。如果这个.hideMe.emit();在初始化期间调用,但它不起作用。我的意思是,在ngOnInit方法或NgafterViewInit中,在初始化期间不需要发出任何东西。您只需要为父组件变量showList
提供一个默认值。可能我没有正确解释。我在初始化期间需要它。子组件是可互换的。默认情况下(showList=true),在父组件中显示child-component-1。但如果条件满足,我想在初始化期间从child-component-2更改showList属性。我尝试在子组件2中执行ngOnInit(){if(condition){this.hideMe.emit();}但是它不起作用,我认为因为隐藏的组件是用*ngIf
隐藏的,它甚至不在那里运行它的代码,所以它不能发送任何消息。我将编辑我的答案。你所要做的就是从子组件发出输出,然后每次发出函数时都显示\hide