私はアプリモジュールと(私の問題を示すために作られた)単一のコンポーネントアプリケーションを持っている、となって次のエラー: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';
}
私がAppComponentにプロバイダとしてUserServiceを追加すると、問題が解決されます。しかし、私はしたくない、私はアプリケーション全体の私のサービスの1つだけのインスタンスが欲しいので。 subModules(フィーチャモジュール)でさえ。
私の理解によると、モジュールレベルのプロバイダとしてサービスを追加すると、モジュールの下のコンポーネントに注入することができます。
ここは私が見ていた例です。
angular2バージョンを使用しています: "2.0.0"
あなたの 'UserService'を投稿してください。それは '@Injectable()'で装飾されていますか? (もちろんPlunkerの例ではない...) – msanford
また、あなたのインポートパスが間違っているかもしれません:あなたは '/ Common'を'/common'の下に置いています... – msanford
@msanford post updated、Userサービスが追加されました。インポートされたクラスがビジュアルスタジオのインテリセンスに表示されるので、パスは問題ありません。 –