Я только что закончил небольшой проект Angular 2 и сравнивая свою работу с кодом ответа модели, я заметил, что когда я смотрел на поставщиков в файле app.module.ts, репетитор включил только одну из двух созданных служб.
users.service.ts
import { Component, Injectable } from '@angular/core';
import { CounterService } from './counter.service';
@Injectable()
export class UserService {
activeUsers = ['Max', 'Anna'];
inactiveUsers = ['Chris', 'Manu'];
constructor(private counterService: CounterService) {}
setToActive(id: number) {
this.activeUsers.push(this.inactiveUsers[id]);
this.inactiveUsers.splice(id, 1);
this.counterService.incrementInactiveToActive();
}
setToInactive(id: number) {
this.inactiveUsers.push(this.activeUsers[id]);
this.activeUsers.splice(id, 1);
this.counterService.incrementActiveToInactive();
}
}
counter.service.ts (используется внутри службы пользователей через @Injectable)
export class CounterService {
activeToInactiveCounter = 0;
inactiveToActiveCounter = 0;
incrementActiveToInactive() {
this.activeToInactiveCounter++;
console.info('Active to Inactive Count:' + this.activeToInactiveCounter);
}
incrementInactiveToActive() {
this.inactiveToActiveCounter++;
console.info('Inactive to Active Count:' + this.inactiveToActiveCounter);
}
}
Теперь, заглянув внутрь файла app.module.ts, он включает службу counter.service.ts, но не службу user.service.ts?
app.module.ts
providers: [CounterService]
Может кто-нибудь объяснить мне, почему он не включил оба? Большое спасибо.
РЕДАКТИРОВАТЬ - app.component.ts для справки:
import { Component } from '@angular/core';
import { UserService } from './users.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [UserService]
})
export class AppComponent {
}
Это еще одна странность, я вижу только @Injectable() внутри users.service.ts, который используется для облегчения второй службы ..
Значит, UserService не вводится ни в какие компоненты?
Он мог зарегистрировать поставщика услуг в свойстве Provider компонента, а не модуля.
Он может включить counter.service в app.module, потому что он хочет, чтобы это была глобальная одноэлементная служба для вашего приложения, и предоставил user.service напрямую в другом модуле или компоненте.
@ExplosionPills Нет, это единственный экземпляр файла @Injectable' is inside of the users.service.ts. Единственное место, где упоминается UserService, - это когда он импортируется внутри файла app.component.ts.
Вы можете показать нам и app.component.ts? Хотя бы куда втыкает пользовательский сервис?
Изменен @ExplosionPills





Вы можете вставлять поставщиков в другие поставщики, компоненты и модули. Когда вы вводите поставщика на определенном уровне, он создается на этом уровне, поэтому поставщик, вводимый в модуль, создается один раз для всего модуля. Если он вводится в компонент, он создается один раз для каждого компонента.
В этом случае вы, вероятно, используете компонент приложения только один раз, поэтому в конечном итоге UserService в любом случае создается только один раз, но если вы использовали несколько AppComponent в своем приложении, у каждого из них была бы собственная пользовательская служба. Однако все они будут использовать один CounterService, поскольку он вводится на уровне модуля.
Куда вводится
UserService?