【问题标题】:Component doesn't get destroyed when *ngIf is false*ngIf 为 false 时组件不会被销毁
【发布时间】:2019-04-26 12:21:22
【问题描述】:

我有一个包含以下子组件的组件:

<app-fullscreen *ngIf="displayFullscreen" [images]="images" [selected]="selected" 
(fullscreenChange)="closeFullscreen($event)"></app-fullscreen>

当有人点击我的一张图片时,会调用此方法:

openFullscreen(images: any, img: any) {
 this.images = images;
 this.selected = img;
 this.displayFullscreen = true;
}

现在组件显示出来了。一旦 displayFullscreen 再次设置为 false,app-fullscreen 组件就不会被破坏。我在 DOM 中注意到了这一点:

所以它检测到ngIf 现在是假的,但它没有做任何事情。如何让组件消失?

编辑:有关我如何将 displayFullscreen 设置为 false 的信息。

app-fullscreen 子组件中,我发出一个值为“false”的事件:

closeFullscreen(){
  this.fullscreenChange.emit("false");
}

当事件发出时,父组件调用该方法:

closeFullscreen(event: any){
  this.displayFullscreen = event;
  this.cd.detectChanges();
}

如您所见,我什至尝试拨打 detectChanges() 但这没有帮助。

【问题讨论】:

  • 贴出相关代码。它有一个错误。
  • 您应该添加代码和说明 displayFullScreen 设置为 false 的位置。在涉及变更检测周期时,这是可以帮助您的重要信息
  • @ivissani 我已经添加了您要求的代码。如果您需要更多,请告诉我。谢谢。

标签: angular angular-ng-if


【解决方案1】:

您发出字符串"false"。字符串"false" 是真实的。所以ngIf 仍然显示组件。

对布尔值使用布尔值,而不是字符串。

【讨论】:

  • 天哪,我一开始尝试使用布尔值,但它说需要一个字符串或符号。原来我从events 导入了EventEmitter 而不是@angular/core,然后我没有想到在更正之后再次尝试使用布尔值。无论如何,非常感谢。
猜你喜欢
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
相关资源
最近更新 更多