【发布时间】:2018-07-02 17:51:07
【问题描述】:
我在 Angular 中有两个服务:
MonitoringService.service.ts:
import { ClientAppSettingService } from './clientAppSettings.service';
import { Injectable, Inject } from '@angular/core';
@Injectable()
export class MonitoringService
{
constructor(private _clientAppSettingService: ClientAppSettingService)
{
this.getclientAppSettings();
}
getclientAppSettings(): any {
this._clientAppSettingService.getConfig().subscribe(result => {
this.data = result;
}, error => console.error(error));
}
和ClientAppSetting.service.ts:
import { Injectable, Inject } from '@angular/core';
import { AppSettingsClient } from '../models/appSettingsClient';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class ClientAppSettingService {
appUrl: string = "";
constructor(private http: HttpClient, @Inject('BASE_URL') baseUrl: string) {
this.appUrl = baseUrl;
}
getConfig() {
return this.http.get<AppSettingsClient>(this.appUrl + 'api/ClientAppSettings/Get');
}
}
这是app.module.ts:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { RouterModule } from '@angular/router';
import { ClientAppSettingService } from './services/clientAppSettings.service';
import { HomeService } from './services/home.service';
import { AppComponent } from './app.component';
import { MonitoringService } from './services/monitoring.service';
import { HomeComponent } from './home/home.component';
import { EmbedReportComponent } from './embedReport/embedReport.component';
import { BaseComponent } from './base.component';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
EmbedReportComponent,
BaseComponent
],
imports: [
BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),
HttpClientModule,
FormsModule,
RouterModule.forRoot([
{ path: '', component: HomeComponent, pathMatch: 'full' },
{ path: 'report', component: EmbedReportComponent }
])
],
providers: [
ClientAppSettingService,
HomeService,
ReportService,
MonitoringService
],
bootstrap: [AppComponent]
})
export class AppModule { }
我关注了this,上面说需要在NgModule的提供者处提供服务。
我也关注了this,上面写着
确保在声明之前声明 ClientAppSettingService 的提供者 MonitoringService 的提供者
我还尝试在构造函数中添加@Inject,如下所示:
constructor( @Inject(ClientAppSettingService) _clientAppSettingService: ClientAppSettingService)
但是,我仍然收到关于 No Provider 的错误:
ERROR 错误:未捕获(承诺):错误:没有 ClientAppSettingService 的提供者! (MonitoringService -> ClientAppSettingService) 错误:没有 ClientAppSettingService 的提供者! (MonitoringService -> ClientAppSettingService)
其他信息:
我有一个base.component.ts,它调用了 MonitoringService:
import { MonitoringService } from './services/monitoring.service';
import { Component, ReflectiveInjector, OnInit } from '@angular/core';
@Component({
template: ''
})
export class BaseComponent
{
constructor(private _monitoringService: MonitoringService)
{
const injector = ReflectiveInjector.resolveAndCreate([
MonitoringService
]);
this._monitoringService = injector.get(MonitoringService);
}
然后我用Base.component.ts 扩展其他组件以使用MonitorningService,如下所示。例如home.component.ts 使用 MonitoringService 如下:
import { Home } from '../models/home';
import { BaseComponent } from '../base.component';
import { MonitoringService } from '../services/monitoring.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html'
})
export class HomeComponent extends BaseComponent implements OnInit
{
home: Home;
constructor(private homeService: HomeService, private _monitorningService: MonitoringService)
{
super(_monitorningService);
}
【问题讨论】:
-
你能发布 app.module.ts 的完整代码
-
@Sajeetharan 我用 app.module.ts 更新了问题
-
你必须
provide一个单例服务,即使注入到其他服务。因此,由于您无法提供服务,因此您必须provide到最近的模块。
标签: angular typescript