Оператор безопасной навигации с аксессором свойства скобки

Я столкнулся с случаем, когда я не могу использовать точечную запись для доступа к свойству, потому что имя свойства содержит точку.

У меня есть объект под названием 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"
Другие вопросы по тегам