Оператор безопасной навигации с аксессором свойства скобки
Я столкнулся с случаем, когда я не могу использовать точечную запись для доступа к свойству, потому что имя свойства содержит точку.
У меня есть объект под названием translations
чьи свойства содержат переводы строк, например Tooltip.O2
Свойство содержит перевод для всплывающей подсказки изображения:
<img [matTooltip]="translations?.Tooltip.O2" [src]="bed.additionalO2 ? medO2 : noO2">
Когда я делаю это, он думает, что я пытаюсь получить доступ к Tooltip
объект внутри translations
с O2
имущество. Я знаю, что могу использовать обозначение в скобках для доступа к нему:
[matTooltip]="translations['Tooltip.O2']"
Тем не менее, это не похоже на оператора безопасной навигации ?
может использоваться с обозначением скобки. Я пытался написать translations?['Tooltip.O2']
, но это вызвало ошибки.
Я хотел бы знать, есть ли способ получить доступ к свойству с помощью точечной нотации или есть ли способ использовать оператор безопасной навигации с помощью скобочной нотации?
2 ответа
Есть способ использовать оператор безопасной навигации с использованием скобок. Фактически безопасный оператор навигации официально называется опциональным оператором цепочки. Синтаксис из документации:
obj.val?.prop
obj.val?.[выражение]
obj.arr?.[индекс]
obj.func?.(аргументы)
Итак, в вашем случае вам нужно использовать
translations?.['Tooltip.O2']
.
Это так типично для меня. Так же, как я публикую свой вопрос, я придумаю решение.
Я сделал следующее:
[matTooltip]="translations ? translations['Tooltip.O2'] : null"
Можете ли вы инициализировать переводы obj? Это позволит избежать любой ошибки.
translations = {}
Вы можете использовать условный оператор для null
проверить
[matTooltip]="translations ? translations['Tooltip.O2'] : null"