SilverCyber
SilverCyber

Reputation: 107

How to change css based on the conditions with Angular's *ngIf?

I'm making a weather widget with Angular. I want different background colors for the day and the night. I'm using OpenWeather apis for fetching the data. OpenWeather has a method .isDay that returns true if it's day time and false for the night. I want to use this method to change the background color.

weather-widget-main.component.ts

  .....
  ...
  setWeatherData(data) {
    this.WeatherData = data;
    let sunsetTime = new Date(this.WeatherData.sys.sunset * 1000);
    this.WeatherData.sunset_time = sunsetTime.toLocaleTimeString();
    let currentDate = new Date();
    this.WeatherData.isDay = (currentDate.getTime() < sunsetTime.getTime());
    this.WeatherData.temp_celcius = (this.WeatherData.main.temp - 273.15).toFixed(0);
    this.WeatherData.temp_min = (this.WeatherData.main.temp_min - 273.15).toFixed(0);
    this.WeatherData.temp_max = (this.WeatherData.main.temp_max - 273.15).toFixed(0);
    this.WeatherData.temp_feels_like = (this.WeatherData.main.feels_like - 273.15).toFixed(0);
  }
  .....
  ...

weather-widget-main.component.html

<div id="divWeatherMain">
  <div *ngIf="WeatherData.isDay" class="weatherWidgetRow">
    <i class="fas fa-3x fa-sun sun"></i>
  </div>
  <div *ngIf="!WeatherData.isDay" class="weatherWidgetRow">
    <i class="fas fa-3x fa-moon moon"></i>
  </div>
  <div class="weatherWidgetRow cloudDiv">
    <i class="fas fa-3x fa-cloud cloud"></i>
  </div>

  <div class="weatherWidgetRow" style="font-size:32px; margin-top:5px;">
    {{WeatherData.temp_celcius}}°C
  </div>
  <div class="weatherWidgetRow" style="font-size:12px;">
    {{WeatherData.temp_min}}°C / {{WeatherData.temp_max}}°C
  </div>
  <div class="weatherWidgetRow" style="font-size:12px;">
    Feels Like: {{WeatherData.temp_feels_like}}°C
  </div>
  <div class="weatherWidgetRow" style="font-size:25px; margin-top:10px">
    {{WeatherData.name}}
  </div>
  <div class="weatherWidgetRow" style="font-size:12px;">
    Humidity: {{WeatherData.main.humidity}}%
  </div>
</div>

weather-widget-main.component.css

.....
...
#divWeatherMain {
  display: block;
  border-radius: 10px;
  width: 200px;
  height: 220px;
  background: rgb(0,0,0);
  background: linear-gradient(100deg, rgba(0,0,0,1) 0%, rgba(8,7,42,1) 100%);
  color: White;
  font-family: 'Segoe UI', Tamoha, Geneva, Verdana, sans-serif;
}
.....
...

Upvotes: 0

Views: 945

Answers (4)

Viral Patel
Viral Patel

Reputation: 1156

You can use

<div id="divWeatherMain">
<div class="weatherWidgetRow" [ngClass]=”WeatherData.isDay? day-bg-color: night-bg-color”> 
<i class="fas fa-3x" [ngClass]=”WeatherData.isDay?  fa-sun sun : fa-moon moon”></i> 
</div>
    
...
</div>

Upvotes: 0

cucuru
cucuru

Reputation: 3698

You have to use ngClass, there are different ways to do it depending on your usage.

Check:

https://angular.io/api/common/NgClass

Upvotes: 0

Vinay
Vinay

Reputation: 2339

<div class="weatherWidgetRow">
    <i [ngClass]="WeatherData.isDay ? fas fa-3x fa-sun sun : fas fa-3x fa-moon moon"></i>
</div>

Upvotes: 0

Kardon63
Kardon63

Reputation: 336

You can use ngClass to achieve this

Example:

 <div class="weatherWidgetRow" [ngClass]="{'class1': WeatherData.isDay === ture, 'class2': WeatherData.isDay === false}">
    <i same for here you can use ng class to change the icon></i>
  </div>

Upvotes: 1

Related Questions