нг-если с 3 условием не работает?angularjs - PullRequest
0 голосов
/ 03 января 2019

Я попытался иметь 3 условия в одном и том же ng-if, и мое приложение перестало прокручивать .... Я разделил 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 голосов
/ 03 января 2019

Вам нужно изменить порядок вашей логики, чтобы вещь, которая с наибольшей вероятностью потерпела неудачу, была на первом месте. Вы также можете использовать подразумеваемую «правдивость», чтобы упростить эту логику

ng-if="params.schedule && params.schedule.length && params.schedule != 'undefined-undefined-'"

Если params.schedule ложно (не определено), оно на этом останавливается. Все хорошо.

Если вы проверите params.schedule.length FIRST и params.schedule не определено, произойдет ошибка, потому что вы проверяете свойство чего-то, что не определено.

Если if(params.schedule.length > 0) совпадает с if(params.schedule.length), потому что любая ненулевая длина = true.

Вот хороший пример использования правдивости: https://codeburst.io/javascript-null-vs-undefined-20f955215a2

0 голосов
/ 03 января 2019

Ваше состояние выглядит неправильно.

params.schedule.length > 0 && params.schedule != undefined

Давайте пройдем через это.

Если params.schedule.length больше 0, то точно не может быть undefined. Используя &&, в этом порядке условия не имеют смысла, и это может привести к ошибкам, если params.schedule не определено, потому что вы получите ошибку при элиминации свойства длины в качестве первого условия (не может получить доступ к свойству длины undefined).

Я думаю, вы проверяете, является ли 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
...