例如,如果我在app.module.ts
注册服务,我必须执行以下操作才能在组件中提供服务
app.module.ts
import { AppComponent } from './app.component';
import { MyComponent } from './mycomponent/mycomponent.component';
import { MyService } from './services/myservice.service';
@NgModule({
declarations: [
AppComponent,
MyComponent
],
imports: [
],
providers: [MyService],
bootstrap: [AppComponent]
})
mycomponent.component.ts
import { Component, OnInit } from '@angular/core';
import { MyService } from '../services/myservice.service';
@Component({
selector: 'my-selector',
templateUrl: './mycomponent.component.html',
styleUrls: ['./my-component.component.scss']
})
export class MyComponent implements OnInit {
constructor(private _myService: MyService) { }
ngOnInit() {
this._myService.test()
}
}
但我也可以在组件本身注册使用它,而无需向app.module.ts
添加任何内容
import { Component, OnInit } from '@angular/core';
import { MyService } from '../services/myservice.service';
@Component({
selector: 'my-selector',
templateUrl: './mycomponent.component.html',
styleUrls: ['./my-component.component.scss'],
providers: [MyService]
})
export class MyComponent implements OnInit {
constructor(private _myService: MyService) { }
ngOnInit() {
this._myService.test()
}
}
我很好奇,每种方式有什么不同?
答案 0 :(得分:6)
在应用程序的根提供程序中添加服务时,所有组件都将注入相同的服务实例。因此在应用程序期间只会创建一个实例。在这种情况下,您可以在服务中保留state
。
当您在Component
的提供商中添加服务时,每次创建 组件的新实例时,也会创建新的instance
服务。在这种情况下,您无法将state
保留在此类服务中,
根据您的逻辑提供所需的位置,但在根模块中提供所有服务的常见情况。