Угловой материал - изменить цвет опции списка матов на выбранном

Как я могу изменить цвет выбранной опции mat-list-option? Прямо сейчас у меня что-то вроде этого:

Текущий список  введите описание изображения здесь

Я хочу изменить цвет всей опции или карты «при выборе» на зеленый. Примерно так:  введите описание изображения здесь

Мой код такой:

<mat-selection-list #list>
    <mat-list-option *ngFor="let yuvak of yuvaks">
    {yuvak.name}
    {yuvak.phonenumber}
     </mat-list-option>
</mat-selection-list>

person Tanmay Parmar    schedule 22.11.2018    source источник


Ответы (4)


Вы можете использовать атрибут aria-selected="true" из тега mat-list-option, чтобы настроить таргетинг на выбранный параметр,
и предоставить для него соответствующие свойства CSS.

mat-list-option[aria-selected="true"] {
  background: rgba(0, 139, 139, 0.7);
}

Рабочая демонстрация Stackblitz

person Abhishek Kumar    schedule 23.11.2018
comment
Я не реализовал, но из демонстрации думаю, что это сработает. Однако где я могу найти документацию для атрибута like aria-selected ?. - person Tanmay Parmar; 23.11.2018
comment
пожалуйста, поищите в сети, потому что я искал изменения dom всякий раз, когда проверял mat-list-option и обнаруживал, что этот атрибут срабатывает, поэтому я пошел дальше с атрибутом для стиля тега mat-list-option. - person Abhishek Kumar; 23.11.2018
comment
@TanmayParmar, пожалуйста, проголосуйте и за ответ, это полезно для пользователей, которые ищут ответы. - person Abhishek Kumar; 24.11.2018
comment
Отличное решение. Я использовал метод в машинописном тексте, который берет элемент и проверяет, находится ли он в списке выбранных элементов, но нацеливание на фактические атрибуты, уже предоставленные angular, намного лучше. Спасибо, что указали на это. - person SleekPanther; 08.10.2020

Принятый ответ работает нормально, но в нем используется жестко заданное значение цвета (background: rgba(0, 139, 139, 0.7)). Такой подход фактически нарушит ваши стили и цвета, если вы решите переключиться на другую предварительно созданную тему материала или использовать настраиваемую тему (как описано в Тематическое оформление страницы приложения Angular Material).

Итак, если вы используете SCSS, вы можете использовать следующий код в файле стиля вашего компонента:

@import '~@angular/material/theming';

mat-list-option[aria-selected="true"] {
  background: mat-color($mat-light-theme-background, hover, 0.12);
}

Приведенный выше код адаптирован из mat-select options - таким образом, у вас будет единый вид во всем приложении: .mat-option.mat-selected:not(.mat-option-multiple) { background: mat-color($background, hover, 0.12);}

Демо: https://stackblitz.com/edit/material-selection-list-5-0-0-selection-color-change-qaq1xr

Или, если вы используете темную тему, измените код следующим образом:

mat-list-option[aria-selected="true"] {
  background: mat-color($mat-dark-theme-background, hover, 0.12);
}

Демо: https://stackblitz.com/edit/material-selection-list-5-0-0-selection-color-change-w8beng

Если вы просто хотите использовать собственный цвет, я предлагаю выбрать один из Материал Спецификации, которые также представлены в Angular Material Design scss.

$primaryPalette: mat-palette($mat-green);

mat-list-option[aria-selected="true"] {
  background: mat-color($primaryPalette, 500);
}

Демо: https://stackblitz.com/edit/material-selection-list-5-0-0-selection-color-change-tt3nyj

person andreivictor    schedule 05.03.2020

Выпадающее:

mat-list-option имеет mat-option.mat-active, который срабатывает, когда опция активна, и mat-option.mat-selected, когда опция выбрана. Добавьте следующее в свой CSS, чтобы изменить активные или выбранные стили, в зависимости от ваших потребностей.

.mat-option.mat-active {
  background: blue !important;
}

.mat-option.mat-selected {
  background: red !important;
}

Рабочая демонстрация

Список выбора:

Список выбора имеет атрибут aria-selected, по умолчанию это false. Если вы выберете этот элемент, он изменится на true. Все, что вам нужно, это установить CSS, как показано ниже:

.mat-list-option[aria-selected="true"] {
  background: rgba(200, 210, 90, 0.7);
}

Рабочая демонстрация

person Maihan Nijat    schedule 22.11.2018
comment
я использую список выбора. это раскрывающийся список. - person Tanmay Parmar; 23.11.2018
comment
@TanmayParmar Отредактируйте мой ответ для списка выбора. - person Maihan Nijat; 23.11.2018

Иногда использование [aria-selected] кажется слишком «тупым».

Вы также можете получить выбранное состояние узла и использовать его по мере необходимости.

Пример 1: у вас есть дочерний компонент, которому нужно передать состояние

<mat-list-option #option>

   <app-custom-list-option-widget [selected]="option.selected"></app-custom-list-option-widget>

</mat-list-option>

Пример 2: вы хотите установить собственный класс css вместо использования [aria-selected]

.is-selected { color: red; }

Затем в шаблоне:

<mat-list-option #option>

   <span [class.is-selected]="option.selected"> Option text </span>

</mat-list-option>
person Simon_Weaver    schedule 28.06.2021