Angular (Тип скрипта) – Как добавить условие If внутри массива

Я показываю кнопки на экране, выбирая кнопки для отображения, вызывая метод, который выглядит, как показано ниже.

getButtons: IGetButtonsList = {
  "Buttons": [
     {
       "DisplayName": "Create User",
       "Target": "./createuser"
     },
     {
       "DisplayName": "Load Products",
       "Target": "./getproducts/all"
     }
  ]
};

Я хочу добавить условие внутри массива, если this.role === 'WL_H3G'. Я хочу перестать возвращать элемент кнопки «Создать пользователя» из массива. У меня есть доступ к свойству this.role в файле ts компонента.

Я попытался добавить проверку условия, если this.role === 'WL_H3G внутри массива, но она выдает ошибки компиляции.

«путем вызова метода, который выглядит так, как показано ниже…» Это явно не метод.

Behemoth 29.09.2023 13:33

Массивы предназначены для хранения данных, а не логики. Вам нужно будет добавить проверку для определенного role либо в шаблоне HTML, либо в другом месте вашего TypeScript с помощью метода, который возвращает только те элементы массива, которые вы хотите.

Chris Barr 29.09.2023 13:46
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам необходимо переопределить реквизиты, чтобы они принимали неопределенный тип (обратите внимание, что не забудьте проверить условие в HTML, чтобы не вызвать ошибку при рендеринге.

Поскольку this.role извлекается из API, будьте осторожны, чтобы getButtons make не возвращал нужное значение, поскольку getButtons определяется до того, как this.role имеет значение.

getButtons: IGetButtonsList = {
  "Buttons": [
      this.role === 'WL_H3G'?undefined:{
       "DisplayName": "Create User",
       "Target": "./createuser"
     },
     {
       "DisplayName": "Load Products",
       "Target": "./getproducts/all"
     }
  ]
};

Вы можете использовать синтаксис расширения для исключения элементов в массиве на основе условия:

const optionalButtons = [{
       "DisplayName": "Create User",
       "Target": "./createuser"
     }]
getButtons: IGetButtonsList = {
  "Buttons": [
     ...(this.role == "WL_H3G" ? [] : optionalButtons),
     {
       "DisplayName": "Load Products",
       "Target": "./getproducts/all"
     }
  ]
};

Здесь оператор spread (...) распаковывает элементы массива, который вычисляется с использованием условия this.role == "WL_H3G".
Это означает, что если условие возвращает true, элементы в массив добавляться не будут, в противном случае будут добавлены элементы optionalButtons.

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