Angular 角度-*ngIf未评估
我正在尝试对一个问题进行故障排除,并编写了以下代码以了解发生了什么,但现在我更加困惑了。理想情况下,如果Angular 角度-*ngIf未评估,angular,Angular,我正在尝试对一个问题进行故障排除,并编写了以下代码以了解发生了什么,但现在我更加困惑了。理想情况下,如果entry.customer具有值,则应打印该值,然后还应显示Hello,否则应显示NOPE和bye,但实际结果是仅显示entry.customer的值 {{entry.customer} 你好 不 再见 {{entry.customer} 你好 不 再见 当我开始跟踪这个问题时,我认为可能是由于来自BehaviorSubject的条目值导致了更改检测问题,所以我尝试在区域中获取值,但这并没
entry.customer
具有值,则应打印该值,然后还应显示Hello
,否则应显示NOPE
和bye
,但实际结果是仅显示entry.customer
的值
{{entry.customer}
你好
不
再见
{{entry.customer}
你好
不
再见
当我开始跟踪这个问题时,我认为可能是由于来自BehaviorSubject的条目值导致了更改检测问题,所以我尝试在区域中获取值,但这并没有改变结果
ngOnInit():void{
此.ngZone.run(()=>{
调试器;
此.\u entryService.entry.subscribe(entry=>{
调试器;
this.entry=entry;
});
})
}
有谁能解释一下*ngIf不起作用的可能原因,但使用大括号确实显示了该值?如果有任何帮助,我正在使用的组件将从获取条目值的基本组件扩展而来,因为此应用程序中有许多相同类型的组件。您可能使用了变更检测:变更检测策略。在这种情况下,请尝试手动触发变更检测
这就是语法的问题。中间缺少分号。你应该写
<span *ngIf="entry.customer; else no">
<h1>Hello</h1>
</span>
你好
您也可以使用“then”或“then else”
你好
问题是我已经将组件添加到模块中,但没有将模块添加到app.module中。感谢@raj m的回答,让我找到了解决方案
你好
不
);您在中的代码中缺少[分号],可能您有控制台错误,否则您希望它显示两次,就像模板中的字符串插值(大括号值)显示两次一样?这可能是因为未定义值“entry”时,您的ngIf将尝试访问其“customer”属性,在这种情况下,只需将其更改为entry?.customer(可选的链接运算符),以便在未定义项时,您的ngIf返回false。控制台中没有任何内容。还有,有一次我只是在检查条目是否存在,它的行为是否相同,即使当时字符串插值也在工作。虽然这是首选语法,但它可以使用分号,也可以不使用分号。我会记住这一点。我希望现在我在我的模块中发现了这个问题,我可以删除ngZone的内容,默认的更改检测将起作用。
<span *ngIf="entry.customer; else no">
<h1>Hello</h1>
</span>
<span *ngIf="entry.customer; then content">
<h1>Hello</h1>
</span>
<span *ngIf="entry.customer; else no">
<h1>Hello</h1>
</span>
<ng-template #no>
<h1> NOPE</h1>
</ng-template>