我有一个应用程序模块和单组分应用(做证明我的问题),并获得以下错误:Angular2“没有服务提供者!”错误时添加提供商@NgModule
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { UserService } from './components/common/userservice';
@NgModule({
imports: [
BrowserModule,
],
declarations: [
AppComponent
],
providers: [UserService],
bootstrap: [AppComponent],
entryComponents: []
})
export class AppModule {
}
代码:对的AppModule
Error in ./AppComponent class AppComponent_Host - inline template:0:0 caused by: No provider for UserService! ; Zone: <root> ; Task: Promise.then ; Value:
代码我AppComponent:
import { Component} from '@angular/core';
import { UserService} from './userservice';
@Component({
selector: 'App',
template: `<h3>App component</h3>
user name: {{userName}}
`,
providers: []
})
export class AppComponent {
userName: string;
constructor(userService: UserService) {
this.userName = userService.userName;
}
}
我UserService代码:
import { Injectable, EventEmitter } from '@angular/core';
@Injectable()
export class UserService {
obs$: EventEmitter<any> = new EventEmitter<any>()
userName = 'Sherlock Holmes';
}
现在,如果我添加UserService为供应商AppComponent,它会解决这个问题。但我不想,因为我只想在整个应用程序中使用我的服务的一个实例。即使在subModules(功能模块)中。
根据我的理解,如果我添加服务作为模块级供应商,那么我可以只是将其注入到任何组件下模块。
这是我正在看的例子。
现在用angular2版本: “2.0.0”
请发布您的'UserService';它是用'@Injectable()'装饰的吗? (除非当然是Plunker的例子......) – msanford
另外,你的导入路径可能是错误的:你在下面的一个和'/ common'中使用'/ Common' ... – msanford
@msanford post updated,User服务添加。路径很好,因为导入的类出现在visual studio intellisense中。 –