In this article, we are going to learn how to change the color of one component based on another component that is irrelevant to each other, to achieve this we are going to use BehaviorSubject.
BehaviorSubject is similar to the subject, a subject is a special type of observables that are used to send data to other components or services.
Let us understand with an example.
First, create a new project by using the following command.
ng new ChangeColorDemo
Then create a new service using the below command.
ng g service Data
Open data-services.ts and paste the below code in it.
import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class DataService { //Declare BehaviorSubject With static Value private paramSource = new BehaviorSubject<string>('red'); sharedParam = this.paramSource.asObservable(); constructor() { } //Update BehaviorSubject Value changeParam(param: string) { this.paramSource.next(param) } }
Open the project in visual code and then creates two–component with the help of the below command.
ng g c FirstComponent ng g c SecondComponent
Open firstcomponent.ts and put the below code in it.
export class FirstComponent implements OnInit { message!: string; selectedColor = 'red'; constructor(private data: DataService) { } ngOnInit() { } colorData = [{ name: 'teal', color: 'teal' }, { name: 'lightblue', color: 'lightblue' }, { name: 'lightgrey', color: 'lightgrey' }, { name: 'pink', color: 'pink' }] updateSelectedStyle(value: any) { this.selectedColor = value this.data.changeParam(value); } }
Open firstcomponent.html and put the below code in it.
<select class="form-control" #selected (change)="updateSelectedStyle(selected.value)"> <option *ngFor="let colorname of colorData" [ngValue]="colorname" [ngStyle]="{'background-color': colorname.color}"> {{colorname.color}} </option> </select> <div class="mt-2"> <div [ngStyle]="{'background-color': selectedColor}" class="card"> <div class="card-body"> <h5 class="card-title">Component 1</h5> <p class="card-text">{{selectedColor}}</p> </div> </div> </div>
Open secondcomponent.ts and put the below code in it.
export class SecondComponent implements AfterViewInit { colourName!: string; constructor(private data: DataService) { } ngAfterViewInit(): void { this.data.sharedParam.subscribe((colourName:any) => { this.colourName = colourName }) }
Open secondcomponent.html and put the below code in it.
<div [ngStyle]="{'background-color': colourName}" class="card mt-5"> <div class="card-body"> <h5 class="card-title">Component 2</h5> <p class="card-text">{{colourName}}</p> </div> </div>
Open app.component.html and put the below code in it.
<div class="d-flex justify-content-center"> <div style="text-align: center; font-size: x-large; font-family: monospace;"></div> <div style="margin:10px" class="card-deck"> <app-firstcomponent></app-firstcomponent> <app-secondcomponent></app-secondcomponent> </div> </div>
That’s it.
Output:
Also, check CRUD Operations With .Net 5.0 In Angular 13
In this article, we have to show Create and Used PIPE in angular
In this article, we have to show Create and Used PIPE in angular
In this article, we have to show Create and Used PIPE in angular