Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 子组件如何在子组件初始化时控制其自身在父组件中的可见性?_Angular_Output_Angular6_Behaviorsubject - Fatal编程技术网

Angular 子组件如何在子组件初始化时控制其自身在父组件中的可见性?

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来更

父组件中有两个可互换的子组件,其可见性由父变量showList控制

<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