# Creating and Using Services Services in Angular are reusable pieces of code that handle data fetching, business logic, or state management that multiple components or other services need to access. ## Creating a Service You can generate a service using the Angular CLI: ```bash ng generate service my-data ``` Or you can manually create a TypeScript class and decorate it with `@Injectable()`. ```ts import {Injectable} from '@angular/core'; @Injectable({ providedIn: 'root', }) export class BasicDataStore { private data: string[] = []; addData(item: string): void { this.data.push(item); } getData(): string[] { return [...this.data]; } } ``` ### The `providedIn: 'root'` Option Using `providedIn: 'root'` is the recommended approach for most services. It tells Angular to: - **Create a single instance (singleton)** for the entire application. - **Make it available everywhere** automatically, without needing to list it in any `providers` array. - **Enable tree-shaking**, meaning the service is only included in the final JavaScript bundle if it is actually injected somewhere. ## Injecting a Service Once a service is created, you can inject it into components, directives, or other services using the `inject()` function. ### Injecting into a Component ```ts import {Component, inject} from '@angular/core'; import {BasicDataStore} from './basic-data-store.service'; @Component({ selector: 'app-example', template: `
Data items: {{ dataStore.getData().length }}