Разделение проблем имеет решающее значение для работоспособного приложения, и наличие уровня данных, состоящего из служб, которые получают данные из источника и передают данные компонентам, - это практика, к которой вы определенно захотите привыкнуть.
Итак, теперь, когда мы знаем, как передавать данные в компоненты, давайте посмотрим, как получить эти данные из службы.
Создание и регистрация PersonsService
Создание
- Создайте новый файл:
src/app/persons/persons.service.ts
- Откройте его в VSCode и начните вводить
a-service
: должно появиться меню выбора фрагмента. Выберите базовую версию:a-service
.
import { Injectable } from '@angular/core'; @Injectable() export class PersonsService {}
Регистрация
Сервисы Angular необходимо зарегистрировать в модуле.
Итак, давайте создадим новый функциональный модуль PersonsModule
и зарегистрируем в нем наш новый PersonsService
.
- Создать
src/persons/persons.module.ts
- Добавьте
PersonsService
в его массивproviders
:
import { NgModule } from '@angular/core'; // App Services import { PersonsService } from './persons.service'; @NgModule({ providers: [PersonsService], }) export class PersonsModule {}
- Дайте
AppModule
знать, чтоPersonsModule
существует:
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; // App Components import { AppComponent } from './app.component'; import { GreetingCardComponent } from './greeting-card/greeting-card.component'; // App Modules import { PersonsModule } from './persons/persons.module'; @NgModule({ declarations: [AppComponent, GreetingCardComponent], imports: [BrowserModule, PersonsModule], bootstrap: [AppComponent], }) export class AppModule {}
Получение данных от PersonsService
- Обновите
PersonsService
, чтобы он предоставил метод для получения данных:
import { Injectable } from '@angular/core'; // App Models import { Person } from './person.model'; @Injectable() export class PersonsService { // In the future, this will fetch data from a REST endpoint getPersons(): Person[] { const persons: Person[] = [ new Person({ name: 'William', age: 41 }), new Person({ name: 'Mickey', age: 90 }), new Person({ name: 'Donald', age: 85 }), ]; return persons; } }
- Обновите
AppComponent
, чтобы использовать новыйPersonsService
import { Component } from '@angular/core'; // App Models import { Person } from './persons/person.model'; // App Services import { PersonsService } from './persons/persons.service'; @Component({ selector: 'ng4d-root', template: ` <ng4d-greeting-card *ngFor="let person of persons" [person]="person"></ng4d-greeting-card> `, }) export class AppComponent { persons: Person[]; constructor(private personsService: PersonsService) { this.persons = this.personsService.getPersons(); } }
Как вы могли заметить, мы используем *ngFor
для циклического перебора массива persons
и печати компонента ng4d-greeting-card
для каждой итерации.
Подведение итогов
Вы только что научились:
- Создайте и зарегистрируйте сервис.
- Начните систематизировать кодовую базу ваших приложений Angular по функциям (
src/app/persons
- «функция»), каждая со своим собственным модулем. - Внедрить сервис в компонент и получить от него данные.
Все становится интереснее, но лучшее еще впереди.
В следующем рассказе мы познакомимся с RxJS и Observables и узнаем, как легко получать данные из REST API.
Предыдущая: Угловые компоненты: передача данных
Далее: передача данных из конечной точки REST в компоненты Angular