Как временно изменить значение цветовой переменной в компоненте в Ionic 8 с помощью нового обновления цветовой палитры?

В приложении Angular с Ionic Framework у меня есть компонент, в котором для определенного действия мне нужно сделать переменную цвета по умолчанию --ion-background-color прозрачной и вернуться к определенному цвету после завершения определенного действия. В Ionic 7 рекомендовалось определить все цветовые переменные внутри файла theme/variables.scss. Изменить переменную цвета можно, импортировав theme/variables.scss внутри необходимого компонента и изменив там --ion-background-color всякий раз, когда я хочу сделать его прозрачным.

компонент.scss

@import "{path}/theme/variables.scss";

.transparent-active {
  --background: transparent !important;
  --ion-background-color: transparent !important;
}

компонент.ts

enableTransparency = false;

onAction(): void {
   this.enableTransparency = true;
}

onActionFinished(): void {
   this.enableTransparency = false;
}

компонент.html

<ion-content [class.transparent-active] = "enableTransparency">
</ion-content>

Раньше это работало без каких-либо проблем.


Однако в Ionic 8 они обновили цветовую палитру по умолчанию и рекомендовали удалить все цветовые переменные, если вам не нужно определять собственную цветовую палитру. Новые переменные цвета для светлых и темных тем автоматически импортируются при импорте core.scss и соответствующего SCSS-файла темной темы. Если в файле theme/variables.scss определены какие-либо переменные, они перезапишут палитру по умолчанию.

Мне нужно перейти на новую цветовую палитру, поэтому я удалил все переменные из файла theme/variables.scss. Проблема в том, что, поскольку глобальные переменные удалены, у меня нет определенной переменной --ion-background-color, которую я мог бы сделать прозрачной внутри компонента. Решение, которое я использовал в Ionic 7, не работает. Я попытался импортировать core.scss и соответствующую темную тему SCSS в файл SCSS компонента, чтобы посмотреть, будет ли он импортировать необходимую цветовую переменную, но, похоже, это все равно не работает. Мне также нужно убедиться, что переменная --ion-background-color возвращается к исходному цвету, когда прозрачность отключена.

вы можете просто использовать <div [ngStyle] = "{'--background': enableTransparency ? 'transparent' : 'yourDesiredColor' }"></div>

Najam Us Saqib 29.04.2024 10:16
Тестирование функциональных 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
2
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В вашем page.html вы можете объявить обычный класс:

<ion-content class = "enableTransparency">
</ion-content>

и используйте свою функцию, чтобы изменить цвет в вашем файле ts:

onAction(): void {
   this.enableTransparency = true; // Keep it or not, depending on whether you need it for something else. 

   (<HTMLStyleElement>document.querySelector(".enableTransparency")).style.background = "your color";
}

onActionFinished(): void {
   (<HTMLStyleElement>document.querySelector(".enableTransparency")).style.background = "your color";
}

Спасибо за ответ. Я понял, что причина, по которой мой метод не работал, заключалась в том, что сторонняя библиотека блокировала элемент <ion-content>, цвет которого мне нужно было изменить (который я обработал впоследствии, что устранило проблему). Однако технически этот метод делает то, о чем я просил, поэтому я выбрал его в качестве ответа.

FelixDracul 21.05.2024 09:33

пожалуйста ;)

Tahoune Tarik 13.06.2024 00:34

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