Есть ли что-то вроде оператора безопасной навигации, которое можно использовать в массивах?
Я использовал Safe Navigation Operator for Objects для загрузки асинхронных вызовов, и это довольно удивительно. Я думал, что смогу воспроизвести то же самое для массивов, но в моем коде Angular отобразится ошибка синтаксического анализа шаблона. я знаю *ngIf
такое альтернативное решение, но есть ли более простой (по коду) способ, такой как оператор безопасной навигации?
<div class="mock">
<h5>{{data?.title}}</h5> //This works
<h6>{{data?.body}}</h6> //This works
<h6>{{simpleData?[0]}}</h6> // This is what I tried to implement
</div>
4 ответа
есть ли более простой (по коду) способ, такой как оператор безопасной навигации?
Есть троичный оператор.
состояние? expr1: expr2
<h6>{{simpleData?simpleData[0]:''}}</h6>
Есть ли что-то вроде оператора безопасной навигации, который можно использовать в массивах?
Да, то, что вы ищете, известно как оператор опциональной цепочки ( JavaScript / TypeScript).
Синтаксис, показанный в документации MDN JavaScript:
obj.val?.prop
obj.val?.[expr]
obj.arr?.[index]
obj.func?.(args)
Итак, чтобы добиться того, чего вы хотите, вам нужно изменить свой пример с:
<h6>{{simpleData?[0]}}</h6>
К:
<h6>{{simpleData?.[0]}}</h6>
^
Также см. Как использовать необязательную цепочку с массивом в Typescript?.
Конечно, это дело вкуса, но в таких случаях я предпочитаю более короткий подход:
<h6>{{(simpleData || [])[0]}}</h6>
Другие ответы равносильны тому же, но я считаю foo && foo[0]
быть максимально читаемым. Правая часть оператора логического-и не будет оцениваться, если левая часть ложна, поэтому вы смело получаетеundefined
(или я думаю null
, если вы не верите Дугласу Крокфорду.) с минимальным количеством дополнительных символов.
В этом отношении вы просили "более простое" решение, но на самом деле *ngIf
вероятно, подходит для указанного вами варианта использования. Если вы воспользуетесь любым из ответов здесь, вы получите пустойh6
тег, который вам не нужен. Если вы сделаете сам тег условным, вы можете просто поставитьfoo[0]
на руле и будьте уверены, что он не будет оцениваться, когда foo
все еще не определено, к тому же вы никогда не загрязняете страницу пустым тегом.