Angular 6 - Как отформатировать [ngClass] при использовании переменной

Я хочу добавить класс на основе элемента в объекте в моем файле машинописного текста компонентов. Кажется, я не могу получить правильный формат, чтобы это работало.

Когда значение «selectedColourPalette» больше нуля, я хочу добавить основной цвет из «colorPaletteOne» в HTML.

CSS

colourPaletteOne = {
    primary: 'blue', 
    secondary: 'grey',    
  }

HTML

<div> [ngClass] = "{'border-{{colourPaletteOne.primary}}' : selectedColourPalette > 0}"></div>

colourPaletteOne находится в файле машинописного текста или css?

Bijay Yadav 31.01.2019 13:04
Тестирование функциональных 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
3
1
11 320
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуй это:

Условие: если отображается selectedColourPalette > 0, чем border-blue, в противном случае будет отображаться border-grey.

HTML

<div [ngClass] = "selectedColourPalette > 0? 'border-' + colourPaletteOne.primary:'border-' + colourPaletteOne.secondary">sadvsdv</div>

ТС

  selectedColourPalette = 1;
      colourPaletteOne = {
        primary: 'blue', 
        secondary: 'grey',    
      }

CSS

.border-blue {
    background-color: blue; 
  }
.border-blue {
    background-color: grey;
  }

Спасибо за ответ @Abhishek. К сожалению, это не то, как мне нужно, чтобы это работало в этом случае. Каждый объект цветовой палитры будет содержать несколько цветов, которые я хотел бы добавить в html. Как вы можете видеть в моем примере, мне нужно было бы получить класс "border-blue" и т. д.

Que 31.01.2019 12:54

@ Que ok colourPaletteOne является переменной?

Abhishek 31.01.2019 13:01

Это значение в объекте. Например, это будет работать: [ngClass] = "'border-' + colorPaletteOne.primary" - и будет назначен правильный цвет. Мне просто нужно знать способ его форматирования, чтобы он применялся только на основе условия. Выбрано ли это условиеColourPalette === 1 или > 0.

Que 31.01.2019 13:02

Вы понимаете, что 1 также > 0?

Markus Dresch 31.01.2019 13:11

хаха да. Меня не смущает условие, я просто форматирую его таким образом, чтобы принять условие.

Que 31.01.2019 13:23
Ответ принят как подходящий

Вы не должны использовать двойные фигурные скобки {{ }} при привязке к атрибуту с помощью квадратных скобок []. Поэтому было бы так:

<div [ngClass] = "selectedColourPalette > 0 ? 'border-' + colourPaletteOne.primary : ''"></div>

Примечание для редактирования: изменена структура ngClass, исправлена ​​опечатка.

Обновлять

Если вы хотите улучшить логику проверки условий, вы можете добавить метод в компонент и передать ему параметры, возвращая желаемый класс CSS в виде строки. Нравится:

В шаблоне

<div [ngClass] = "getCssClassByPalette(selectedColourPalette, colourPaletteOne)"></div>

В компоненте

getCssClassByPalette = (scp, cp) => {

    let cssClass = '';

    swicth(scp){
      case 1: {
         cssClass = cp.primary;
         /* do stuff */
         break; // or return the css class
      }
      /* other cases */
    }

    return cssClass;
}

Спасибо, Харун, ты не возражаешь, если я спрошу, что означает : '' в конце? Это позволяет провести еще одну проверку состояния?

Que 31.01.2019 13:15

Пожалуйста. Да, это тернарный оператор. condition ? true statement : false statement . Вы также можете проверить этот ответ: https://stackoverflow.com/a/37091329/1331040

Harun Yilmaz 31.01.2019 13:17

ах поймал. Хорошо, наконец, (если вы не возражаете) - Как это могло принять множественное условие, противоположное «истинному» или «ложному» сценарию. Например, 'selectedColourPalette === 1' добавить этот класс, если selectedColourPalette === 2' сделать это и т.д.?

Que 31.01.2019 13:25

Очень мило с вашей стороны, что нашли время ответить на этот дополнительный вопрос. Спасибо Харун!

Que 31.01.2019 13:32

Не беспокойтесь :) Хорошего дня!

Harun Yilmaz 31.01.2019 13:33

Поскольку вы просто хотите добавить один предопределенный класс, другим вариантом будет:

<div [class.border-blue] = "selectedColourPalette > 0"></div>

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