Javascript 为什么这个条件总是正确的?
quick.htmlJavascript 为什么这个条件总是正确的?,javascript,angular,typescript,Javascript,Angular,Typescript,quick.html <ul *ngFor="let q of categoryid;"> <li colspan="4"> <strong>Q.No. {{q.questionId}}</strong> {{q.questionName}} </li> <li> <ul *ngFor="let o of q.options; let i = index" (click)
<ul *ngFor="let q of categoryid;">
<li colspan="4">
<strong>Q.No. {{q.questionId}}</strong>
{{q.questionName}}
</li>
<li>
<ul *ngFor="let o of q.options; let i = index"
(click)="selectedIndex = (i+q.questionId)">
<div>
<li
[ngClass]="{correctAnswer: o.Ans && selectedIndex===(i + q.questionId),
wrongAnswer: !o.Ans && selectedIndex===(i+q.questionId)}">
<strong>{{o.Ans}}</strong> {{o.optionName}}
</li>
</div>
</ul>
</li>
</ul>
-
Q.No。{{q.questionId}
{{q.questionName}}
-
-
{{o.Ans}{{o.optionName}
correctAnswer
类始终为true
。为什么? “false”字符串实际上被视为真布尔表达式,请参见
为了解决这个问题,您必须为o对象提供一个布尔值({Ans:false}而不是{Ans:false}),或者运行一个不同的检查,如:o.Ans==“true”。您也可以考虑使用类型转换相等性检查,比如O.ANS=真,但我不推荐这种方法。 < P>您的类名应该在单引号中,并将条件语句放入括号:
<li
[ngClass]="{'correctAnswer': (o.Ans && selectedIndex === (i + q.questionId)),
'wrongAnswer': (!o.Ans && selectedIndex === (i+q.questionId)})">
<strong>{{o.Ans}}</strong> {{o.optionName}}
</li>
此外,您可以在HTML中显示调试信息,并查看表达式的计算方式:
<p>(o.Ans && selectedIndex === (i + q.questionId)) is
{{ (o.Ans && selectedIndex === (i + q.questionId)) }}</p>
<p>(!o.Ans && selectedIndex === (i+q.questionId)}) is
(!o.Ans && selectedIndex === (i+q.questionId)})</p>
(o.Ans&&selectedIndex==(i+q.questionId))是
{(o.Ans&&selectedIndex==(i+q.questionId))}
(!o.Ans&&selectedIndex==(i+q.questionId)})是
(!o.Ans&&selectedIndex==(i+q.questionId)})
是否调试并查看了值?请将代码/数据包含为文本,而不是图像。
<p>(o.Ans && selectedIndex === (i + q.questionId)) is
{{ (o.Ans && selectedIndex === (i + q.questionId)) }}</p>
<p>(!o.Ans && selectedIndex === (i+q.questionId)}) is
(!o.Ans && selectedIndex === (i+q.questionId)})</p>