添加提供者@NgModule 时出现 Angular2 "No provider for Service!" 错误
Angular2 "No provider for Service!" error when provider is added @NgModule
我有一个应用程序模块和单组件应用程序(用于演示我的问题),并收到以下错误:
Error in ./AppComponent class AppComponent_Host - inline template:0:0 caused by: No provider for UserService! ; Zone: <root> ; Task: Promise.then ; Value:
AppModule 代码:
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 {
}
我的 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;
}
}
我的用户服务代码:
import { Injectable, EventEmitter } from '@angular/core';
@Injectable()
export class UserService {
obs$: EventEmitter<any> = new EventEmitter<any>()
userName = 'Sherlock Holmes';
}
现在,如果我将 UserService 添加为 AppComponent 的提供者,它将解决问题。但我不想,因为我只想在整个应用程序中使用我的服务的一个实例。即使在子模块(功能模块)中。
根据我的理解,如果我在模块级别添加服务作为提供者,那么我可以将它注入模块下的任何组件。
这是我正在看的例子。
我正在使用 angular2 版本:“2.0.0”
删除您的服务:UserService
来自 app.module.ts
,然后添加 component
:
@Component({
selector: 'App',
template: `<h3>App component</h3>
user name: {{userName}}
`,
providers: [UserService]
})
希望对您有所帮助。
导入路径错误:您在一个中使用 /Common
,在下面使用 /common
。
Visual Studio 并且 WebStorm 不会显示路径区分大小写的 IntelliSense 错误。
此外,如果使用Angular 5的AoT模板编译,你会得到"This component is not part of a module"错误,即使是,因为导入路径不正确。如果没有 AoT,这将起作用,因此在转换为 AoT 时你会得到惊喜。
出现此错误的另一个原因 - 我将服务复制到不同的目录并单独更新每个文件。尽管第一个文件仍然存在,但在我更新 app.module.ts.
之前我还是收到了这个错误
我有一个应用程序模块和单组件应用程序(用于演示我的问题),并收到以下错误:
Error in ./AppComponent class AppComponent_Host - inline template:0:0 caused by: No provider for UserService! ; Zone: <root> ; Task: Promise.then ; Value:
AppModule 代码:
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 {
}
我的 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;
}
}
我的用户服务代码:
import { Injectable, EventEmitter } from '@angular/core';
@Injectable()
export class UserService {
obs$: EventEmitter<any> = new EventEmitter<any>()
userName = 'Sherlock Holmes';
}
现在,如果我将 UserService 添加为 AppComponent 的提供者,它将解决问题。但我不想,因为我只想在整个应用程序中使用我的服务的一个实例。即使在子模块(功能模块)中。
根据我的理解,如果我在模块级别添加服务作为提供者,那么我可以将它注入模块下的任何组件。
这是我正在看的例子。
我正在使用 angular2 版本:“2.0.0”
删除您的服务:UserService
来自 app.module.ts
,然后添加 component
:
@Component({
selector: 'App',
template: `<h3>App component</h3>
user name: {{userName}}
`,
providers: [UserService]
})
希望对您有所帮助。
导入路径错误:您在一个中使用 /Common
,在下面使用 /common
。
Visual Studio 并且 WebStorm 不会显示路径区分大小写的 IntelliSense 错误。
此外,如果使用Angular 5的AoT模板编译,你会得到"This component is not part of a module"错误,即使是,因为导入路径不正确。如果没有 AoT,这将起作用,因此在转换为 AoT 时你会得到惊喜。
出现此错误的另一个原因 - 我将服务复制到不同的目录并单独更新每个文件。尽管第一个文件仍然存在,但在我更新 app.module.ts.
之前我还是收到了这个错误