更新:我忽略了一项服务,问题实际上是关于注入服务注入服务的服务。我更新了帖子。
我很难在Angular 2应用程序中的服务中注入服务,我不确定我是否在解释依赖注入错误的概念。
我的情况如下: 我有一个名为 app.component 的父组件,它使用 loginservice 对用户进行身份验证,此服务在应用程序引导过程中被引导。
我还有一个使用 sharedservice 的艺术家组件,这个服务在我的父组件中提供。我希望 loginService 也注入我的 sharedService 中,因此我可以注销用户是在我的sharedService内部触发了某个操作。
不知何故,这总是从我的sharedService返回一个错误,我的loginService未定义。我认为以下行应该可以在我的sharedService中注入我的loginService:
constructor(@Inject(LoginService) private _loginService: LoginService,
private _router: Router, private _http: Http) { }
_loginService仍未定义...有人知道我做错了吗?
根据要求,相关代码snippits:
bootstrap.ts
import { APP_BASE_HREF } from '@angular/common';
import { bootstrap } from '@angular/platform-browser-dynamic';
import { ROUTER_PROVIDERS } from '@angular/router';
import { HTTP_PROVIDERS } from '@angular/http';
import { LoginService } from './+login/login.service';
import { AppComponent } from './app.component';
bootstrap(AppComponent, [
ROUTER_PROVIDERS,
HTTP_PROVIDERS,
LoginService
]);
app.component
import { Component, OnInit } from '@angular/core';
....
@Component({
moduleId: module.id,
selector: 'sd-app',
templateUrl: 'app.component.html',
directives: [ROUTER_DIRECTIVES, SidebarMenuComponent, PAGINATION_DIRECTIVES, Growl],
providers: [ArtistService,
SharedService]
})
artist.component
import { Component, provide, OnInit } from '@angular/core';
....
@Component({
moduleId: module.id,
directives: [ FORM_DIRECTIVES, Confirm, RequestListComponent,
QuotationListComponent, TOOLTIP_DIRECTIVES, SELECT_DIRECTIVES ],
pipes: [ MapToIterablePipe, DayMonthYearTimePipe ],
templateUrl: 'artist-detail.html'
})
export class ArtistComponent implements OnInit {
constructor(
private _artistService: ArtistService,
public sharedService: SharedService
) { }
artist.service
import { Injectable } from '@angular/core';
import { SharedService } from '../shared/shared.service';
@Injectable()
export class ArtistService {
constructor(private _sharedService: SharedService) {
}
shared.service.ts
import { Injectable, Inject } from '@angular/core';
import { Router } from '@angular/router';
import { Headers, Http, RequestOptions } from '@angular/http';
import { LoginService } from '../+login/login.service';
@Injectable()
export class SharedService {
constructor(@Inject(LoginService) private _loginService: LoginService,
private _router: Router, private _http: Http) { }
logoutUser(objectType: string, objectID: string) {
this._sharedService.logout();
}