javascript - *ngIf 不会在 else 块中切换回 false
问题描述
我正在使用 Angular7、npm 6.4.1、节点 10.15.3。
我只是在玩 ngIf,这没有任何用处。我正在使用两个按钮在显示和隐藏标题之间来回切换。虽然这只是一个ngIf
声明,但它可以与以下代码一起正常工作:
<p>Do you want to see the last header?</p>
<button (click)="yesHeader()">Yes please!</button>
<button (click)="noHeader()">PLEASE G-D NO!</button>
<h2 *ngIf="displayHeader" style="color:blue">Here it is in all its glory!</h2>
和
public displayHeader=false;
yesHeader(){
this.displayHeader=true
}
noHeader(){
this.displayHeader=false
}
效果很好,单击按钮时显示标题,单击yesHeader
按钮时再次隐藏标题noHeader
。
但是,当我添加一个 ngIf Else 块时,它停止来回切换。变化如下:
<p>Do you want to see the last header?</p>
<button (click)="yesHeader()">Yes please!</button><button (click)="noHeader()">NO! NO!</button>
<h2 *ngIf="displayHeader; else noHeader" style="color:blue">Here it is in all its glory!</h2>
<ng-template #noHeader>
<h5>You don't know what you're missing!</h5>
</ng-template>
现在,它You don't know what you're missing!
在开始时显示,如果我单击是则切换到标题。但是,如果我在那之后单击“否”按钮,它不会切换回隐藏标题。
我做错了什么,我怎样才能让它切换回来?
作为添加的数据点,如果我离开 else 块,但else noHeader
退出 ngIf 语句,它仍然不会切换回来。因此,似乎 ng-template 的存在正在阻止事情的发展。
解决方案
问题是存在名称冲突noHeader
。它在您的示例中用作组件类的方法以及ng-template
. 尝试更改方法名称或模板名称:
<p>Do you want to see the last header?</p>
<button (click)="yesHeader()">Yes please!</button><button (click)="noHeader()">NO! NO!</button>
<h2 *ngIf="displayHeader; else noHeaderTemplate" style="color:blue">Here it is in all its glory!</h2>
<ng-template #noHeaderTemplate>
<h5>You don't know what you're missing!</h5>
</ng-template>
这是一个实际的例子。
推荐阅读
- angular - Angular 8 急切加载模块(包括应用程序模块)不会出现在 chrome 开发工具中
- powershell - 如何判断我当前的 PowerShell 会话是否通过 SSH?
- javascript - SharePoint 2013 客户端自定义 Javascript 搜索框,能够将结果填充到 HTML 表中
- spring-boot - 对于处理遗留问题的微服务架构,什么是有据可查的缓存策略模式?
- wordpress - Isotope 在 wordpress 上的布局损坏,但可以在另一个测试页面上使用
- c# - 从过时的 FragmentManager 过渡到 Android.Support.V4.App
- python - 如何下载 Python 的 PolyFrag 模块?
- android - 实施指向我的应用的深层链接后,应用图标未出现
- amazon-web-services - 如何使用 .env 文件为 Springboot 应用程序使用环境变量?
- java - 我想让后台服务每 24 小时将项目添加到 RecyclerView