我尝试在同一ng-if中设置3个条件,并且我的应用停止了滚动。 我将3个条件分为2个div,将2个条件分为第一个div,将1个条件分为第二个div,现在它可以工作了……但是我不明白为什么...
params.schedule值是undefined-undefined-
<div class="inputs-row" ng-if="params.schedule.length > 0 && params.schedule != undefined">
<div ng-if="params.schedule != 'undefined-undefined-'">
<div class="inputCol">
{{'ScheduleDate' | translate}}
</div>
<div class="inputCol">
{{params.schedule}}
</div>
</div>
</div>
任何人都可以验证或解释吗?
答案 0 :(得分:1)
您的情况看起来不对。
params.schedule.length > 0 && params.schedule != undefined
让我们经历一下。
如果params.schedule.length
大于0,则肯定不能为undefined
。
使用&&
时,按照这种顺序,条件没有意义,并且如果params.schedule
未定义,则很容易出错,因为在将length属性作为第一个条件时会出错(无法访问length属性)的)。
我认为您正在检查params.schedule
是否为数组。
在js:Array.isArray
方法中,有一种更干净,更简单的方法。
使用以下方法更改您的ng-if:
ng-if="Array.isArray(params.schedule) && params.schedule.length" // that already checks if it's greater than 0 because if (0) === false
答案 1 :(得分:1)
您需要更改逻辑顺序,以便最有可能发生故障的事情首先出现。您还可以使用隐含的“真实性”来简化此逻辑
ng-if="params.schedule && params.schedule.length && params.schedule != 'undefined-undefined-'"
如果params.schedule
为假(未定义),它将在此处停止。一切都很好。
如果您先检查params.schedule.length
且未定义params.schedule
,则它将出错,因为您正在检查未定义内容的属性。
如果if(params.schedule.length > 0)
与if(params.schedule.length)
相同,因为任何非零长度= true。
这是使用真实性的一个很好的入门:https://codeburst.io/javascript-null-vs-undefined-20f955215a2