【发布时间】:2017-11-11 16:56:54
【问题描述】:
我是 Angular 的新手,我遇到了一些我不明白的烦人问题。我想将我的服务注入@NgModule,这样我就可以在应用程序的任何地方使用它,而无需再次声明或导入它。然后当我运行我的项目时,刷新页面后一切都很好并得到这个异常:
错误:未捕获(承诺):错误:没有服务提供者
make.service.ts
import { Injectable, Inject } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class MakeService {
originUrl;
constructor(private http: Http, @Inject('ORIGIN_URL') originUrl: string) {
this.originUrl = originUrl;
}
getMakes() {
return this.http.get(this.originUrl + '/api/makes')
.map(res => res.json());
}
getFeatures() {
return this.http.get(this.originUrl + '/api/features')
.map(res => res.json());
}
}
我在 app.module.ts 中声明了此服务:
import { MakeService } from './services/make.service';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { sharedConfig } from './app.module.shared';
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
...sharedConfig.imports
],
declarations: sharedConfig.declarations,
bootstrap: sharedConfig.bootstrap,
providers: [MakeService, { provide: 'ORIGIN_URL', useValue: location.origin }]
})
export class AppModule {
}
最后在我的组件中使用它vehicle-form.component.ts
import { Component, OnInit } from '@angular/core';
import { MakeService } from '../../services/make.service';
@Component({
selector: 'app-vehicle-form',
templateUrl: './vehicle-form.component.html',
styleUrls: ['./vehicle-form.component.css'],
})
export class VehicleFormComponent implements OnInit {
makes;
vehicle = {};
constructor(private makeService: MakeService) { }
ngOnInit() {
this.makeService.getMakes().subscribe(makes => {
this.makes = makes
console.log("MAKES", this.makes);
});
}
onMakeChange() {
console.log("VEHICLE", this.vehicle);
}
}
当我像这样在我的组件中声明提供者时:
...
@Component({
selector: 'app-vehicle-form',
templateUrl: './vehicle-form.component.html',
styleUrls: ['./vehicle-form.component.css'],
providers: [MakeService]
})
...
然后一切正常,但这不是我想要存档的。
【问题讨论】:
-
app-vehicle-form在哪个模块中?是否有任何机会延迟加载? -
@Maximus 它在 app.module.shared.ts 文件中,您希望我显示其中的代码吗?我不知道它是否延迟加载,我该如何检查它?
-
你使用路由吗?
标签: angular dependency-injection asp.net-core