JorisSchelfaut / angular-dev-tutorial-first-app

Project following the Angular tutorial on angular.io
MIT License
0 stars 0 forks source link

Angular services #9

Closed JorisSchelfaut closed 3 months ago

JorisSchelfaut commented 4 months ago

Conceptual preview of services

This tutorial introduces Angular services and dependency injection.

1. Create a new service for your app

This step creates an injectable service for your app. In the Terminal pane of your IDE:

  1. In your project directory, navigate to the first-app directory.
  2. In the first-app directory, run this command to create the new service.
    ng generate service housing --skip-tests
  3. Run ng serve to build the app and serve it to http://localhost:4200.
  4. Confirm that the app builds without error. Correct any errors before you continue to the next step.

2. Add static data to the new service

This step adds some sample data to your new service. In a later lesson, you'll replace the static data with a web interface to get data as you might in a real app. For now, your app's new service uses the data that has, so far, been created locally in HomeComponent. In the Edit pane of your IDE:

  1. In src/app/home/home.component.ts, from HomeComponent, copy the housingLocationList variable and its array value.

  2. In src/app/housing.service.ts:

    1. Inside the HousingService class, paste the variable that you copied from HomeComponent in the previous step.

    2. Inside the HousingService class, paste these functions after the data you just copied. These functions allow dependencies to access the service's data.

        getAllHousingLocations(): HousingLocation[] {
          return this.housingLocationList;
        }
        getHousingLocationById(id: number): HousingLocation | undefined {
          return this.housingLocationList.find((housingLocation) => housingLocation.id === id);
        }

      You will need these functions in a future lesson. For now, it is enough to understand that these functions return either a specific HousingLocation by id or the entire list.

    3. Add a file level import for the HousingLocation.

      import {HousingLocation} from './housinglocation';
  3. Confirm that the app builds without error. Correct any errors before you continue to the next step.

3. Inject the new service into HomeComponent

This step injects the new service into your app's HomeComponent so that it can read the app's data from a service. In a later lesson, you'll replace the static data with a live data source to get data as you might in a real app.

In the Edit pane of your IDE, in src/app/home/home.component.ts:

  1. At the top of src/app/home/home.component.ts, add the inject to the items imported from @angular/core. This will import the inject function into the HomeComponent class.

    import {Component, inject} from '@angular/core';
  2. Add a new file level import for the HousingService:

    import {HousingService} from '../housing.service';
  3. From HomeComponent, delete the housingLocationList array entries and assign housingLocationList the value of empty array ([]). In a few steps you will update the code to pull the data from the HousingService.

  4. In HomeComponent, add the following code to inject the new service and initialize the data for the app. The constructor is the first function that runs when this component is created. The code in the constructor will assign the housingLocationList the value returned from the call to getAllHousingLocations.

      housingService: HousingService = inject(HousingService);
      constructor() {
        this.housingLocationList = this.housingService.getAllHousingLocations();
      }
  5. Save the changes to src/app/home/home.component.ts and confirm your app builds without error. Correct any errors before you continue to the next step.