Угловое предложение 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. Фактически он будет проходить для любого значения, целого или нет!

Другие вопросы по тегам