具有3个条件的ng-if不起作用? angularjs

时间:2019-01-03 18:11:12

标签: javascript angularjs angular-ng-if

我尝试在同一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>

任何人都可以验证或解释吗?

2 个答案:

答案 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