app.module.ts中的注册服务与angular4中的单个组件有什么好处?

时间:2017-09-17 06:12:27

标签: angular typescript

例如,如果我在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()
    }

}

我很好奇,每种方式有什么不同?

1 个答案:

答案 0 :(得分:6)

在应用程序的根提供程序中添加服务时,所有组件都将注入相同的服务实例。因此在应用程序期间只会创建一个实例。在这种情况下,您可以在服务中保留state

当您在Component的提供商中添加服务时,每次创建 组件的新实例时,也会创建新的instance服务。在这种情况下,您无法将state保留在此类服务中,

根据您的逻辑提供所需的位置,但在根模块中提供所有服务的常见情况。