WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Angular · Intermediate · question 25 of 100

How do you handle global state management in Angular applications using services and RxJS?

📕 Buy this interview preparation book: 100 Angular questions & answers — PDF + EPUB for $5

Global state management in Angular applications using services and RxJS usually involves the following components:

1. State: An object that holds the data we want to manage globally.

2. Store: A single source of truth for the state object managed using a service.

3. Actions: Functions that modify the state.

4. Selectors: Functions that read the state data.

Here’s a step-by-step process to implement global state management using Angular services and RxJS:

1. **Create a state interface**: First, define an interface that represents the shape of your global state.

interface AppState {
  counter: number;
}

2. **Create an Angular service as a store**: Use Angular service for state management by injecting it into the component’s constructor.

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { AppState } from './app.state';

@Injectable({
  providedIn: 'root'
})
export class StoreService {
  private state: AppState = {
    counter: 0
  };

  private appState$ = new BehaviorSubject<AppState>(this.state);

  getState() {
    return this.appState$.asObservable();
  }

  updateState(newState: AppState) {
    this.appState$.next(newState);
  }
}

3. **Setting up actions**: Actions are used to modify the state. Create actions that update the store’s state.

import { AppState } from './app.state';
import { StoreService } from './store.service';

export class Actions {
  constructor(private store: StoreService) {}

  increment() {
    const appState = this.store.getState().value;
    const newState: AppState = {
      ...appState,
      counter: appState.counter + 1
    };
    this.store.updateState(newState);
  }

  decrement() {
    const appState = this.store.getState().value;
    const newState: AppState = {
      ...appState,
      counter: appState.counter - 1
    };
    this.store.updateState(newState);
  }
}

4. **Setting up selectors**: Selectors are used to read the state data.

import { AppState } from './app.state';

export class Selectors {
  static selectCounter(state: AppState) {
    return state.counter;
  }
}

5. **Inject the store and actions into components**: Use the store, actions, and selectors in your Angular components to maintain the global state.

import { Component } from '@angular/core';
import { StoreService } from './store.service';
import { Actions } from './actions';
import { Selectors } from './selectors';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  counter$ = this.store.getState().pipe(
    map((state) => Selectors.selectCounter(state))
  );

  constructor(private store: StoreService, private actions: Actions) {}

  increment() {
    this.actions.increment();
  }

  decrement() {
    this.actions.decrement();
  }
}

Using this method, you can create a global state management system in Angular using services and RxJS. The global state will be managed through a single store, and components will interact with the store to read or update the state using selectors and actions.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Angular interview — then scores it.
📞 Practice Angular — free 15 min
📕 Buy this interview preparation book: 100 Angular questions & answers — PDF + EPUB for $5

All 100 Angular questions · All topics