Угловое предложение ng-if не работает в обоих направлениях
Я отображаю JSON в таблице, вот так:
<tr ng-repeat="room in allRooms | orderBy: 'OpenTime'">
Где allRooms содержит такие json-объекты:
{
"Name": "Room five",
"OpenTime": "2016-02-19 00:00:00",
"Entries": 2,
"Capacity": 10,
"Type": "TypeThree"
}
И свойство Type может иметь одно из пяти различных значений ("typeOne", "typeTwo", "TypeThree" и т. Д.)
Я хочу использовать ng-if для отображения кнопки в столбце, только если Type не равен "typeOne" или "typeTwo", например:
<button type="button" ng-if="room.Type != 'typeOne' || room.Type != 'typeTwo'"></button>
Это не работает для меня, хотя это то, что мне нужно.
Но это (хотя оно не достигает того, что мне нужно) работает:
<button type="button" ng-if="room.Type == 'typeOne' || room.Type == 'typeTwo'"></button>
Поэтому мне интересно, почему второй ng-if работает так, как должен, а первый - нет, когда единственное различие между ними заключается в использовании операторов, равных или не равных?
1 ответ
Проблема здесь в вашей логике. Не зная, что в ваших данных для allRooms, я могу лучше всего объяснить, почему первый оператор if странный, используя числа. Давайте предположим, что оператор if был следующим:
if (a !== 1 || a !== 2)
Это если утверждение всегда будет правдой. Иначе быть не может, потому что если значение равно 1, это не 2, а если это 2, то это не 1. Так что проблема с первым утверждением if состоит в том, что оно всегда будет иметь значение true, а не false.
То, что вы могли бы хотеть взамен, является эквивалентом этого:
if (a !== 1 && a !== 2)
В этом случае оператор if будет проходить для целых чисел, меньших 1 и больше 2, и сбой для 1 или 2. Фактически он будет проходить для любого значения, целого или нет!